在不同插座上的处理器之间共享数据的最快方法

问题描述:

我有一个双插槽8核心处理器,也就是说,每个处理器都有4个核心。我没有完全看过它的规格,但我认为一个单独的存储体以ccNUMA方式连接到每个处理器,因此从另一个处理器的存储体访问相对较慢。他们也有不同的L3缓存我想。在不同插座上的处理器之间共享数据的最快方法

现在我的问题是什么是两个处理器之间共享数据的最快方式。由于ccNUMA和缓存一致性,简单的共享内存将会产生问题。有什么方法可以非常快吗?

+1

不,NUMA是速度和成本之间的妥协。尽量将数据保存在每个CPU上的四个内核中,并避免与其他人共享。它**可以通过添加大量硬件来解决问题。超级电脑可以,但价格标签不同。 –

这将很大程度上取决于您尝试实施的内容。从我所看到的情况来看,通常可以通过一种非常紧密的共享内存方法来做得更好,而不是采用MPI。 (因为有可能在共享内存上做更多的事情)

但是,MPI很难完全错误,因为X的性能好与不好的猜测工作量少得多。

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

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

如果您的内存访问具有非常高的空间局部性,不会“迁移”,请组织您的数据,使空间局部访问的每个“组”都位于同一节点上。

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

编辑:考虑添加“NUMA”标签到您的问题。

OpenMP和OpenMPI都允许跨多个CPU共享数据。我会想象使用这些API中的一个可能比您尝试实现自己的任何API都快。你使用哪一个取决于你想要实现的确切性质。