启用高级功能的系统上的CPU编号

Jay*_*y D 8 windows cpu-architecture hyperthreading linux-kernel

我试图找出一个操作系统(Windows,Linux)如何在启用超线程的环境中为逻辑cpus分配数字.?

两个操作系统是否首先将数字串行分配给物理CPU,然后开始对逻辑cpu进行编号,或者是否遵循其他规则?例如,在具有超线程的2个物理cpu系统中,OS是否将编号0,2分配给第一个物理cpu,然后将1,3分配给第二个物理cpu ..?

任何参考将非常感谢.

提前致谢.

问候,-Jay.

编辑:回应Alan的问题:我需要知道这一点因为,在我的工作中,我需要将各种线程绑定到特定的CPU以避免上下文切换,并且我想确保某些任务(THreads)绑定到单独的物理cpu .谢谢

All*_*nek 8

据我所知,这取决于CPU如何暴露他的核心.启用HT时,没有公开的物理CPU,而是每个物理CPU有两个逻辑CPU,因此如果在任一逻辑CPU上运行线程,则没有区别.唯一重要的是成对的逻辑CPU属于每个物理CPU.

对于单核处理器(如带有HT的Pentium 4),它非常直接,因为你只有一对 - 所以它是(0,1).对于四核处理器(如Nehalem),逻辑核心对为(0,4),(1,5),(2,6)和(3,7).具有所有后半部分的所有前半部分然后具有所有后半部分的模式随着具有更多核心的未来CPU而缩放.

真正的问题是为什么你需要知道配对安排?让操作系统的调度程序为正确的线程选择合适的内核 - 它做得非常不错.

  • 我想知道这个因为我想将不同的任务(线程)绑定到不同的逻辑cpus. (2认同)
  • 我们使用的一些算法有微秒级的时间限制。因此,如果我们不在处理这些算法的多个线程上强制执行 CPU 关联性,则上下文切换会使这个计时期限无法实现。。 (2认同)

Hud*_*son 5

您可以查找/sys/devices/system/cpu/以找到有关CPU的信息。内核及其超线程对的布局可以在中找到/sys/devices/system/cpu/cpuN/topology/thread_siblings_list