如何find关于我的CPU的并行架构的信息?

我是Intel(R)Core(TM)2 Duo CPU T6600 @ 2.20GHz(正如cat /proc/cpuinfo告诉我的那样),但是我需要尽可能地深入。 用于并行编程的架构(可能使用pthreads )。 任何指针?

sys文件系统知道这一切

 $ ls /sys/devices/system/cpu cpu0 cpu2 cpuidle possible sched_mc_power_savings cpu1 cpu3 online present $ ls /sys/devices/system/cpu/cpu0/topology/ core_id core_siblings_list thread_siblings core_siblings physical_package_id thread_siblings_list 

这里是文档

使用这个文件系统,你可以找出你有多少个CPU,有多少个线程,哪个CPU在哪个CPU旁边,哪个CPU与哪个CPU共享另外一个CPU。

例如 – 问:哪些CPU cpu0共享它的二级缓存?

 $ cat /sys/devices/system/cpu/cpu0/cache/index2/{type,level,shared_cpu_list} Unified 2 0-1 

答:它与cpu1(和它自己)共享它的统一二级缓存。

另一个例子:问:哪些CPU与cpu0在同一个物理包中(在一个较大的机器上):

 cat /sys/devices/system/cpu/cpu0/topology/core_siblings 00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000055 

A:内核0,2,4和6.(取自上面的位模式,lsb = cpu0)


并不是所有的linux系统都有sys文件系统,而且它并不总是在根目录下。 (可能在proc / sys?)。 thread_siblings_list表单并不总是可用的,但是thread_siblings(位模式)是可用的。

我发现lstopo 项目的lstopo相当有用。 这将为您提供图形输出(基于在/proc/sys如Alex Brown所述)您的系统的拓扑结构(请参阅其网页中的示例)。 从图形输出你可以很容易地看到

  • 如果超螺纹芯存在
  • 哪些cpu编号对应的是同一物理核心上的不同超线程
  • 使用多少个CPU插座
  • 哪些核心共享三级缓存
  • 如果主存储器在CPU插座之间是共同的,或者您是在NUMA系统上

等等

如果您需要以编程方式访问这些信息,有一些文档可以将hwloc用作库。

为了获得处理器的最低详细信息,系统工程师可以运行其相当于CPUZ,并在法律许可的情况下达到处理器将被安装和使用的家庭或办公地址的最低水平。 软件工程师和开发人员通常不被允许知道这个详细程度,但是我可以告诉你,这个架构可以是处理器产生的类型,或者虚拟的第二个处理器实例接近x1.75处理的等价物,或者是真实的使用技术和控制方法对同一芯片上的物理多个内核进行设计,以增强以前的设计实现。 核心处理器为系统程序员提供了一个接口,应用程序开发人员可以使用,这种访问模式将成为英特尔的期望,可以从中获得详细信息。