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

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

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

解决方法:

那将在很大程度上取决于您要实现的内容的性质.从我所看到的情况来看,使用非常严格管理的共享内存方法通常可以比诉诸MPI更好. (因为可以对共享内存做更多的事情)

但是,MPI很难完全出错,因为关于X为何表现良好的猜测工作要少得多.

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

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

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

如果您的内存访问模式具有较高的时间局部性,但是空间局部性不足以容纳高速缓存,则可以考虑将数据复制到本地缓冲区中.工作完成后,将其复制回去.这使您可以保持程序的相同结构.

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

上一篇:Emit学习 - OpCodes - 动态添加属性、构造函数、方法


下一篇:c – NUMA获取当前节点/核心