Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Language agnostic 如何使程序NUMA就绪?_Language Agnostic_Numa - Fatal编程技术网

Language agnostic 如何使程序NUMA就绪?

Language agnostic 如何使程序NUMA就绪?,language-agnostic,numa,Language Agnostic,Numa,我的程序使用共享内存作为数据存储。此数据必须可用于任何运行的应用程序,并且获取此数据必须快速。但是,有些应用程序可以在不同的NUMA节点上运行,对它们的数据访问非常昂贵。是否每个NUMA节点的数据复制都是实现这一点的唯一方法?有两个主要的减速源可归因于NUMA。首先是远程访问延迟增加,这可能因平台而异。在我使用的平台上,延迟命中率约为30% 性能损失的另一个来源可能来自NUMA节点之间通信链路和控制器的争用 Linux的默认分配方案是在创建数据的节点上分配数据。如果应用程序中的大多数数据由单个线

我的程序使用共享内存作为数据存储。此数据必须可用于任何运行的应用程序,并且获取此数据必须快速。但是,有些应用程序可以在不同的NUMA节点上运行,对它们的数据访问非常昂贵。是否每个NUMA节点的数据复制都是实现这一点的唯一方法?

有两个主要的减速源可归因于NUMA。首先是远程访问延迟增加,这可能因平台而异。在我使用的平台上,延迟命中率约为30%

性能损失的另一个来源可能来自NUMA节点之间通信链路和控制器的争用

Linux的默认分配方案是在创建数据的节点上分配数据。如果应用程序中的大多数数据由单个线程初始化,那么它将为该内存节点生成大量跨NUMA域流量和争用

如果您的数据是只读的,那么复制是一个很好的解决方案

否则,在所有节点之间交错数据分配将在所有节点之间分配请求,并将有助于缓解拥塞


要交错数据,可以使用
set_mempolicy()
from
numaif.h
,如果您使用的是Linux。

这很大程度上取决于您的程序如何(以什么顺序)访问数据,以及它如何写入数据内存访问模式是绝对不可预测的,因此,如何使程序NUMA就绪是“绝对不可预测的”。您可以像在SMP上一样启动程序,如果它的内存访问模式不好,它将运行缓慢。(Numa允许以比本地内存更高的成本访问其他节点的内存)