3

我试图根据 /proc/cpuinfo 为我的应用程序确定处理器关联规则,我的 redhat Linux 显示

processor   : 0   to  47  , means server has 48 processor unit

physical id : 0   to  3   , means server has 4 cpu sockets 

cpu cores   : 6  , means  each socket has 6 cores 

siblings    :  12 , means each core has 2  hyperthreads 

总而言之,这台服务器有 4 * 6 * 2 = 48 个处理器单元,到目前为止我是正确的吗?

我喜欢做的是使用sched_setaffinity函数,首先我想知道的是同一个内核中的超线程,例如...

processor 0  : physical id:0,core id: 0  ...
processor 24 : physical id:0,core id: 0  ...

如果在我的应用程序中,我在 thread1 中使用 CPU_SET(0, &mask),在 thread2 中使用 CPU_SET(24, &mask),那么我可以说 thread1 和 thread2 将共享相同的 L1 缓存,当然也共享相同的 L2 缓存,太……我猜对了吗?

4

1 回答 1

1

如果您的线程被安排在同一个核心(即不同的超线程)上,您只能保证完全共享缓存,在这种情况下您的方法是正确的。

但请记住,将两个任务安排在同一个核心上并不一定会使它们运行得更快,如果你将它们安排在不同的核心上。在所有内核之间通常共享的 L3 非常快。

您需要检查高速缓存是如何在处理器之间共享的。大多数 Intel 处理器在 2-4 个内核之间共享 L2,在所有内核之间共享 L3,而大多数 AMD 型号仅共享 L3。

于 2013-01-24T18:55:00.640 回答