calc_min找不到reducer_min_index的功能

calc_min function of reducer_min_index isn't found

本文关键字:min 功能 index 找不到 calc reducer      更新时间:2023-10-16

嘿,伙计们,我正在尝试使用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运行时开发