c-调用并行for循环中的函数



我正试图在Cilk plus中的并行for循环中调用一个函数。如果我在我调用的函数中声明一个数组,它会有种族问题吗?在运行了一些循环之后,我得到了分段错误或中止(核心转储)错误。

PScan()
{
    // Would working on w create race issues?
    double *w = calloc(num,sizeof(double));
}

如果从cilk_for循环调用PScan(),那么使用w数组将不是一场竞赛。所有并行链都会有自己分配的w副本。完成后一定要释放内存。

但是,请注意,调用像calloc这样的内存分配例程可能涉及锁,这可能会限制性能。像tbbmalloc这样的备用内存分配器可以减轻这种情况。

您可以使用Cilkscreen工具来搜索种族。Cilk工具(Cilkscreen竞赛检测器和Cilkview可伸缩性分析器)可从http://cilkplus.org/download

- Barry Tannenbaum
  Intel Cilk Plus Runtime Development

相关内容

  • 没有找到相关文章

最新更新