cpuinfo决定处理器关联

时间:2013-01-09 03:24:21

标签: c linux cpu-cache

我已经尝试根据/ proc / cpuinfo确定我的应用程序的处理器关联规则,我的redhat Linux showes

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(24,& mask)中使用CPU_SET(0,& mask) 在thread2中,我可以说thread1和thread2将共享相同的L1缓存, 当然,也分享相同的二级缓存...我猜错了吗?

1 个答案:

答案 0 :(得分:1)

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

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

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