【发布时间】:2019-09-12 23:40:33
【问题描述】:
我有一个需要在多个输入上并行运行的 C 函数。
我正在尝试使用 OpenMP 来执行此操作,但问题是,我正在使用的函数正在使用一些内部静态变量进行自己的内部计算。
当尝试并行运行此函数的多个实例时,由于多个线程正在访问同一内存区域,程序会崩溃。
这可以通过将每个静态变量定义为“threadprivate”来解决,但是由于我有很多内部变量,这有点矫枉过正。
有没有办法让 OpenMP 默认将所有变量都视为“线程私有”?
【问题讨论】:
-
我不认为允许编译器通过某种外部机制(例如编译器标志)将
static变量视为threadprivate是一个好主意。这会使阅读此类代码的读者感到困惑。 -
ATM 对我来说无关紧要,因为我只是在我的测试代码上使用 OpenMP 只是为了让它运行得更快,而不是作为生产代码的一部分。
-
为什么这个问题被标记为 C 和 C++?你实际使用的是什么?
-
@Zulan 我使用 C++ 运行我的测试(使用 Catch2 测试框架),而我正在测试的函数是用 C 编写的(这就是所有私有内部成员都是全局的原因)。
标签: c parallel-processing openmp