嘿,伙计们,我正在尝试使用cilk加减速器进行一个简单的find-min操作。出于某种奇怪的原因,我可以包含reducer_min库,但不能使用函数calc_min。有人知道我为什么会犯这个错误吗?
47:错误:"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();
}
如有任何建议,我们将不胜感激!
您可能需要将i强制转换为unsigned,以适应模板cilk::reducer_min_index<unsigned,int>
所以用min.calc_min((unsigned)i,ohd[i]);
代替min.calc_min(i,ohd[i]);
来源:源代码
我可以肯定的是,它对我有效。
这将有助于了解您所在的平台以及您使用的Cilk库的版本。(如果您使用的是英特尔编译器,则与您的编译器版本相同。如果您使用Cilk开源工具包,则可以定义环境变量CILK_VERSION
,并运行任何Cilk程序来打印Cilk版本信息。)
顺便说一句,请注意Cilk库标头将位于默认编译器包含路径中目录的cilk
子目录中,因此包含它们的正常方式是使用
#include <cilk/cilk.h>
#include <cilk/reducer_min.h>
如果您使用该表单,您将从标准位置获取标头,而无需将Cilk库添加到包含路径中。
Neil Faiman
英特尔Cilk Plus运行时开发