【问题标题】:Calling a function in a parallel for loop在并行 for 循环中调用函数
【发布时间】:2013-02-12 04:09:26
【问题描述】:

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

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

【问题讨论】:

  • num 未在您的循环中定义,并且 PScan 不会编译,因为它没有返回类型。请发布真实的代码来演示您遇到的问题。

标签: c parallel-processing cilk-plus


【解决方案1】:

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

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

您可以使用 Cilkscreen 工具来搜索比赛。 Cilk 工具(Cilkscreen 种族检测器和 Cilkview 可扩展性分析器)可从http://cilkplus.org/download免费获得

- Barry Tannenbaum
  Intel Cilk Plus Runtime Development

【讨论】:

  • 谢谢!会试一试。
猜你喜欢
  • 2017-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-11
相关资源
最近更新 更多