Gon*_*tos 3 c memory parallel-processing ram memory-management
我有一个带2个CPU的服务器,每个CPU有6个核心.每个CPU都连接到4 GB的RAM.我有一个并行程序,在两个CPU中并行运行相同的代码(稍作更改),每个核心使用4个线程.
出于效率原因,最好是有一种方法可以确保在CPU 1上运行的代码只在其相应的RAM上分配内存,而不是在CPU 2的RAM上分配内存,反之亦然,因为CPU之间的通信会创建开销.
有没有办法做到这一点?
假设您使用的是Linux,默认的NUMA策略更喜欢在本地分配内存,因此您要求的内容应该是开箱即用的.这可以通过配置来改变.
无论当前的策略是什么,您都可以使用它libnuma来在本地NUMA节点上分配内存(这就是调用RAM +套接字/核心的组合)或在特定节点上分配内存,用numa_alloc_local,numa_alloc_onnode等等.释放内存使用numa_free.有关这些功能和NUMA系统的详细信息,请参见numa(7)和numa_alloc(3)的手册页.