小编Xia*_*eng的帖子

并行化广度优先搜索

我只是自学了一些 OpenMP,这可能很愚蠢。基本上,我试图在 C++ 中并行化广度优先搜索程序,每个节点都需要很长时间来处理。这是一个示例代码:

queue<node*> q;
q.push(head);
while (!q.empty()) {
  qSize = q.size();
  for (int i = 0; i < qSize; i++) {
    node* currNode = q.front();
    q.pop();
    doStuff(currNode);
    q.push(currNode);
  }
}
Run Code Online (Sandbox Code Playgroud)

处理函数 doStuff() 非常昂贵,我想对其进行并行化。但是,如果我通过将 for 循环放在#pragma omp parallel forfor 行之前来并行化 for 循环,则在运行时会弹出各种奇怪的错误。我猜测原因是这种方式q.front()并且q.push()也会并行化,并且多个线程可能会通过同一个节点q.front()(因为它们都在处理之前q.push就被处理了)。

我怎样才能解决这个问题?

c++ parallel-processing breadth-first-search openmp

4
推荐指数
1
解决办法
3491
查看次数