2010-11-15 22 views
0

什么是并行编程中的理想数据结构,在我的情况下是OpenMP。理想的数据结构与OpenMP

#pragma omp parallel for 
for(int i = 0; i < N; i++) 
{ 
    if(table[i] == true) 
     container.insert(i); // ?? what kind 
} 

在这个例子中,如果我们使用一个相似大小的表格,这可能很简单。 C++中用于共享内存并行编程的更一般的数据结构是什么?

回答

1

最好不要依赖于共享数据结构(因为你必须在某个时刻依靠锁,这会减慢速度)。相反,让每个线程写入其自己的结构,并在并行部分完成后合并结果。

+1

你说得对。不幸的是,OpenMPs拥有'reduction'只支持基本类型。 – 2010-11-15 08:41:44

+0

所以每个线程都会有任何数据结构并收集最终结果。多谢你们。 – ennetws 2010-11-16 20:08:40

1

该阵列是并行编程的理想数据结构。

我不同意@Oli Charlesworth不愿意依赖共享数据结构 - 毕竟OpenMP是关于共享内存并行化的,它提供了程序员需要的工具来确保数据安全。

+0

在这种特殊情况下,数组不计数,因为代码是*收集*一些数据(或减少,因为你想调用它)。这将从原始数组中选择一些元素。为了使数组正常工作,它必须为每个工作线程分配一个预先指定的元素,以避免锁,等待状态和竞态条件,但在这种情况下,您怎么知道最终数组将具有多少个元素?你为每个线程分配了多少个元素?然后,您必须允许中央存储库添加每个结果,需要锁定对结构的访问权限,从而损害性能。 – 2010-11-15 18:20:02

+0

因此,在数组的情况下,我需要一个单一的大型数组,然后为每个线程设置一组单独的计数器,而不需要锁? – ennetws 2010-11-16 20:12:39

+0

@ennetws:是的,没错。 – 2010-11-16 22:24:34