Эй, ребята, я пытаюсь выполнить простую операцию поиска мин с использованием редукторов cilk plus. По какой-то странной причине я могу включить библиотеки reducer_min, но я не могу использовать функцию calc_min. Кто-нибудь знает, почему я получаю эту ошибку?
47: ошибка: у класса cilk :: reducer_min_index нет члена с именем calc_min
#include <cilk.h>
#include <reducer_min.h>
#include <iostream>
void findMin(int *d, int *v)
{
int nv, totalnv;
*d = largeint;
cilk::reducer_min_index<unsigned,int> min;
cilk_for (int i = 0; i < totalnv ; i++)
{
if(notdone[i] && mind[i] < min.get_value())
{
min.calc_min(i,ohd[i]);
}
}
cilk_sync;
*v = min.get_index();
*d = min.get_value();
}
Любой совет будет принята с благодарностью!
Возможно, вам придется привести i к unsigned, чтобы соответствовать шаблону cilk::reducer_min_index<unsigned,int>
,
Так замени min.calc_min(i,ohd[i]);
с min.calc_min((unsigned)i,ohd[i]);
Источник: Исходный код
Все, что я могу сказать наверняка, это то, что это работает для меня.
Было бы полезно узнать, на какой платформе вы находитесь и какую версию библиотек Cilk вы используете. (Если вы используете компилятор Intel, то же самое, что и версия вашего компилятора. Если вы используете комплект с открытым исходным кодом Cilk, то вы можете определить переменную среды CILK_VERSION
и запустите любую программу Cilk, чтобы распечатать информацию о версии Cilk.)
Кстати, обратите внимание, что заголовки библиотеки Cilk будут находиться в cilk
Подкаталог каталога в компиляторе по умолчанию включает в себя путь, поэтому нормальный способ их включения
#include <cilk/cilk.h>
#include <cilk/reducer_min.h>
Если вы используете эту форму, вы получите заголовки из стандартного местоположения без необходимости добавлять библиотеку Cilk в ваш путь включения.
Нил Файман
Intel Cilk Plus Runtime Development