我正在尝试在 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
关于在并行 for 循环中调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14825226/