我试图在Cilk plus中调用并行for循环内的函数。如果我在我调用的函数中声明一个数组,它会有种族问题吗?在循环运行后,我收到了Segmentation fault或Aborted(Core dumped)错误。
PScan()
{
// Would working on w create race issues?
double *w = calloc(num,sizeof(double));
}
答案 0 :(得分:1)
如果从cilk_for循环调用PScan(),那么使用w数组将不会是竞赛。所有并行链都有自己分配的w副本。完成后请务必释放内存。
但是,请注意调用内存分配例程(如calloc)可能涉及可能限制性能的锁定。像tbbmalloc这样的备用内存分配器可以减轻这种情况。
您可以使用Cilkscreen工具搜索比赛。 Cilk工具(Cilkscreen竞赛检测器和Cilkview可扩展性分析器)免费提供http://cilkplus.org/download
- Barry Tannenbaum
Intel Cilk Plus Runtime Development