我正在开发NUMA架构,其中每个计算节点有2个套接字和4个逐个内核,计算节点共有8个内核,节点有24GB内存。我必须证明设置processor affinity会对表现产生重大影响。
您是否有任何程序建议我可以用作基准来显示使用处理器关联性之间的影响差异?我还可以编写一个简单的C测试程序,使用MPI,或OpenMP,或pthreads,但是哪种操作最适合进行测试?它必须是利用缓存局部性的东西,但也会触发上下文切换(阻塞操作),因此进程可能会迁移到另一个核心,或者更糟糕的是迁移到另一个套接字。它必须在8个核心的多个上运行。
答案 0 :(得分:3)
我试图在NUMA架构上编写一个程序来衡量内存延迟的不对称性,并且在StackOverflow社区的帮助下,我成功了。您可以从我的StackOverflow帖子中获取该程序。
Measuring NUMA (Non-Uniform Memory Access). No observable asymmetry. Why?
当我在非常类似于你的硬件上运行我的基准程序时,当核心读取/写入不在核心NUMA节点(亲和区域)的内存时,我看到性能损失大约30%。程序必须以一种故意破坏缓存和预取的模式进行读写,否则就没有可观察到的不对称性。
答案 1 :(得分:2)
尝试ASC Sequoia benchmark - CLOMP - 专为测量线程开销而设计。
答案 2 :(得分:0)
您可以使用一个简单的单线程进程,该进程可以写入然后重复读取适度的数据集。显然,该过程需要比单个时间片运行更长的时间,并且足够长以使进程从一个核心迁移到另一个核心,例如, 100秒。
然后您可以运行两个测试用例:
运行8个没有CPU亲和力的进程实例
$ for p in 0 1 2 3 4 5 6 7 ; do time ./my_process & ; done
使用CPU亲和性运行8个进程实例
$ for p in 0 1 2 3 4 5 6 7 ; do time taskset -c $p ./my_process & ; done