4

我正在研究一个NUMA架构,其中每个计算节点有 2 个套接字和 4 个内核,计算节点总共有 8 个内核,每个节点有 24GB 的 RAM。我必须证明设置处理器亲和性会对性能产生重大影响。

您是否有任何程序建议我可以用作基准来显示使用处理器亲和性之间的影响差异?我也可以使用 MPI、OpenMP 或 pthreads 编写一个简单的 C 测试程序,但是什么操作最适合进行该测试?它必须能够利用缓存局部性,但也会触发上下文切换(阻塞操作),因此进程可能会迁移到另一个核心,或者更糟的是,迁移到另一个套接字。它必须在 8 个内核的倍数上运行。

4

3 回答 3

3

我尝试编写一个程序来测试 NUMA 架构上内存延迟的不对称性,在 StackOverflow 社区的帮助下,我成功了。您可以从我的 StackOverflow 帖子中获取该程序。

测量 NUMA(非统一内存访问)。没有可观察到的不对称性。为什么?

当我在与您的硬件非常相似的硬件上运行我的基准程序时,当核心读取/写入不在核心的 NUMA 节点(亲和区域)中的内存时,我看到大约 30% 的性能损失。程序必须以故意破坏缓存和预取的模式进行读写,否则不会出现可观察到的不对称性。

于 2011-09-02T13:25:48.797 回答
2

试试ASC Sequoia 基准测试——CLOMP——专为测量线程开销而设计。

于 2011-10-12T09:49:05.660 回答
0

您可以只使用一个简单的单线程进程,该进程写入然后重复读取适度的数据集。显然,该进程需要运行比单个时间片更长的时间,并且需要足够长的时间以使进程从一个内核迁移到另一个内核,例如 100 秒。

然后,您可以运行两个测试用例:

  1. 在没有 CPU 亲和性的情况下运行 8 个进程实例

    $ for p in 0 1 2 3 4 5 6 7 ; do time ./my_process & ; done

  2. 以 CPU 亲和性运行 8 个进程实例

    $ for p in 0 1 2 3 4 5 6 7 ; do time taskset -c $p ./my_process & ; done

于 2011-04-08T14:06:47.577 回答