在驻留在不同套接字上的处理器之间共享数据的最快方法

时间:2011-09-03 08:47:46

标签: c linux multithreading multiprocessing numa

我有一个双插槽8核处理器,也就是说,每个处理器都有4核。我还没有完全看到它的规格,但我认为单独的存储体以ccNUMA方式连接到每个处理器,因此从另一个处理器的存储体访问相对较慢。他们也有不同的L3缓存。

现在我的问题是在两个处理器之间共享数据的最快方法是什么。由于ccNUMA和缓存一致性,简单的共享内存会出现问题。有什么办法很快吗?

2 个答案:

答案 0 :(得分:2)

这在很大程度上取决于您尝试实施的内容的性质。从我所看到的情况来看,通常可以通过非常严格管理的共享内存方法做得更好而不是诉诸于MPI。 (因为共享内存可以做更多事情)

然而,MPI完全出错是比较困难的,因为对于X表现良好的猜测工作要少得多。

以下是使用共享内存的一些常用方法:

只读数据:如果数据足够小,最好在所有节点上复制数据。

如果您的内存访问具有极高的空间局部性而无法“迁移”,请组织您的数据,以便空间位置访问的每个“组”位于同一节点上。

如果您的内存访问模式显示高时间局部性,但没有足够的空间局部性以适应缓存,则考虑将数据复制到本地缓冲区。工作完成后,将其复制回来。这使您可以保持程序的相同结构。

编辑:请考虑在您的问题中添加“NUMA”标记。

答案 1 :(得分:1)

OpenMP和OpenMPI都允许跨多个CPU共享数据。我认为使用其中一个API可能比你自己尝试实现的任何东西都要快。您使用哪一个取决于您尝试实施的具体性质。