Эй, ребята, я пытаюсь выполнить простую операцию поиска мин, используя cilk plus reducers. По какой-то нечетной причине я могу включить библиотеки reducer_min, но я не могу использовать функцию calc_min. Кто-нибудь знает, почему я получаю эту ошибку?
47: error: 'class 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();
}
Любой совет будет очень благодарен!
Все, что я могу сказать наверняка, это то, что это работает для меня.
Это поможет узнать, на какой платформе вы работаете, и какую версию библиотек Cilk вы используете. (Если вы используете компилятор Intel, это то же самое, что и ваша версия компилятора. Если вы используете комплект с открытым исходным кодом Cilk, вы можете определить переменную среды CILK_VERSION
и запустить любую программу Cilk для печати информации о версии Cilk.)
Кстати, обратите внимание, что заголовки библиотеки Cilk будут находиться в подкаталоге cilk
каталога в стандартном компиляторе, включая путь, поэтому обычным способом их включения является
#include <cilk/cilk.h>
#include <cilk/reducer_min.h>
Если вы используете эту форму, вы получите заголовки из стандартного местоположения, не добавляя библиотеку Cilk в свой путь include.
Нил Файман
Intel Cilk Plus Runtime Development
Возможно, вам придется отдать я в unsigned, чтобы соответствовать шаблону cilk::reducer_min_index<unsigned,int>
.
Поэтому замените min.calc_min(i,ohd[i]);
с min.calc_min((unsigned)i,ohd[i]);
Источник: Исходный код