在openMP中使用lock转储的核心

时间:2015-02-09 08:42:01

标签: parallel-processing locking openmp

我想并行化函数S并锁定每个节点但我不断获得核心转储。我正在尝试在图的每个节点中使用锁。如果我在节点上使用单个锁,它将起作用。

for (l = 0; l < n; l++)
omp_init_lock(&(lock[l]));

#pragma omp parallel for num_threads(16)default(none)  private(v)shared(n,Xof,lock)

for(v = 0; v < n; v++) {
    omp_set_lock(&(lock[v]));
    if(Xof[v] == NYC) 
    {
        S(v);   
        }
    omp_unset_lock(&(lock[v]));
}

1 个答案:

答案 0 :(得分:0)

似乎最可能的原因是S内存在数据竞争(可能有一些嵌入状态)。

测试它的一种方法是使用n个锁但只使用一个线程。如果这不会导致核心转储,则S很可能会发生数据竞争。

如果它确实导致核心转储,那么由锁定引起的初始假设可能是真的。从可见的代码中,我没有看到任何明显错误。我可能会删除共享条款,因为它是多余的,但我不希望这会产生影响。