【发布时间】:2012-05-15 22:18:38
【问题描述】:
我的代码具有以下结构。
#pragma omp parallel for
for( i = 0; i < N; i++ )
{
.....
index = get_index(...);
array[index] = ...;
.....
}
现在index 的值对于每个线程都是唯一的(对于不同的线程,它永远不会重叠),但是 OpenMP 当然无法对此做出猜测,我想是使用同步对象来访问array。
我怎么能要求 openmp 不要为 array 使用同步对象,并依靠我 index 值对于不同的线程是唯一的。我尝试将array 放在私人列表中,但出现分段错误。
【问题讨论】:
-
OpenMP 默认不同步任何内容。所以这应该不是问题。
index是在并行区域内部还是外部声明? -
仅供参考:从不同线程写入共享数组可能会导致可怕的性能问题,因为缓存垃圾。您应该确保这些线程当前写入的索引之间存在一定距离。