在并行 for 循环中调用函数

标签 c parallel-processing cilk-plus

我正在尝试在 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/

相关文章:

使用 pthread.h 进行多线程 C 编程

c - 前缀和的并行化 (Openmp)

postgresql - AWS Aurora Postgres 中的并行计划/查询

c - 为什么 CILK_NWORKERS 会影响只有一个 cilk_spawn 的程序?

c - 英特尔数组符号和初等​​函数是否可以通过至强融核 ISA 很好地矢量化?

c - 在 "C Programming: A modern Approach"中练习

c++ - C(++) 套接字 fd_* 正在阻塞/延迟写入/发送

c - 在 C 中向这个 Hello World 代码添加什么?

java - 在java中并行化任务的最简单方法是什么?

parallel-processing - Cilk 或 Cilk++ 或 OpenMP