Упорядочение / нумерация ядра процессора в 2-чипсете Intel Westmere - PullRequest
0 голосов
/ 20 июня 2011

Я использую процессор Intel Westmere.Архитектура westmere состоит из 12 процессорных ядер, расположенных на 2-чипах.Таким образом, это означает, что каждый чип содержит 6 ядер.

Я не понимаю, как ядра процессора упорядочены или пронумерованы.Я предполагаю, что это может быть одним из следующих:

  1. ядро ​​0,1,2,3,4 и 5 на одном чипе и ядре 6,7,8,9,10 и 11 на втором чипе
  2. ядро ​​0,2,4,6,8, а 10 на одном чипе и ядро ​​1,3,5,7,9, а 11 на второмчип

Кто-нибудь знает порядок / нумерацию ядер процессора

Ответы [ 2 ]

1 голос
/ 06 сентября 2013

Для получения дополнительной информации вы можете попробовать использовать этот инструмент: http://software.intel.com/en-us/articles/intel-64-architecture-processor-topology-enumeration

Это официальный инструмент для определения этого.

Вот пример запуска с компьютера с двумя физическими IntelX5560 (6core + 6HT) под управлением CentOS 5.3 (возможно, немного староват).

Package 0 Cache and Thread details

Box Description:
Cache  is cache level designator
Size   is cache size
OScpu# is cpu # as seen by OS
Core   is core#[_thread# if > 1 thread/core] inside socket
AffMsk is AffinityMask(extended hex) for core and thread
CmbMsk is Combined AffinityMask(extended hex) for hw threads sharing cache
       CmbMsk will differ from AffMsk if > 1 hw_thread/cache
Extended Hex replaces trailing zeroes with 'z#'
       where # is number of zeroes (so '8z5' is '0x800000')
L1D is Level 1 Data cache, size(KBytes)= 32,  Cores/cache= 2, Caches/package= 4
L1I is Level 1 Instruction cache, size(KBytes)= 32,  Cores/cache= 2, Caches/package= 4
L2 is Level 2 Unified cache, size(KBytes)= 256,  Cores/cache= 2, Caches/package= 4
L3 is Level 3 Unified cache, size(KBytes)= 8192,  Cores/cache= 8, Caches/package= 1
      +-----------+-----------+-----------+-----------+
Cache |  L1D      |  L1D      |  L1D      |  L1D      |
Size  |  32K      |  32K      |  32K      |  32K      |
OScpu#|    0     8|    1     9|    2    10|    3    11|
Core  |c0_t0 c0_t1|c1_t0 c1_t1|c2_t0 c2_t1|c3_t0 c3_t1|
AffMsk|    1   100|    2   200|    4   400|    8   800|
CmbMsk|  101      |  202      |  404      |  808      |
      +-----------+-----------+-----------+-----------+

Cache |  L1I      |  L1I      |  L1I      |  L1I      |
Size  |  32K      |  32K      |  32K      |  32K      |
      +-----------+-----------+-----------+-----------+

Cache |   L2      |   L2      |   L2      |   L2      |
Size  | 256K      | 256K      | 256K      | 256K      |
      +-----------+-----------+-----------+-----------+

Cache |   L3                                          |
Size  |   8M                                          |
CmbMsk|  f0f                                          |
      +-----------------------------------------------+

Combined socket AffinityMask= 0xf0f

Package 1 Cache and Thread details

Box Description:
Cache  is cache level designator
Size   is cache size
OScpu# is cpu # as seen by OS
Core   is core#[_thread# if > 1 thread/core] inside socket
AffMsk is AffinityMask(extended hex) for core and thread
CmbMsk is Combined AffinityMask(extended hex) for hw threads sharing cache
       CmbMsk will differ from AffMsk if > 1 hw_thread/cache
Extended Hex replaces trailing zeroes with 'z#'
       where # is number of zeroes (so '8z5' is '0x800000')
      +-----------+-----------+-----------+-----------+
Cache |  L1D      |  L1D      |  L1D      |  L1D      |
Size  |  32K      |  32K      |  32K      |  32K      |
OScpu#|    4    12|    5    13|    6    14|    7    15|
Core  |c0_t0 c0_t1|c1_t0 c1_t1|c2_t0 c2_t1|c3_t0 c3_t1|
AffMsk|   10   1z3|   20   2z3|   40   4z3|   80   8z3|
CmbMsk| 1010      | 2020      | 4040      | 8080      |
      +-----------+-----------+-----------+-----------+

Cache |  L1I      |  L1I      |  L1I      |  L1I      |
Size  |  32K      |  32K      |  32K      |  32K      |
      +-----------+-----------+-----------+-----------+

Cache |   L2      |   L2      |   L2      |   L2      |
Size  | 256K      | 256K      | 256K      | 256K      |
      +-----------+-----------+-----------+-----------+

Cache |   L3                                          |
Size  |   8M                                          |
CmbMsk| f0f0                                          |
      +-----------------------------------------------+
0 голосов
/ 17 сентября 2011

Они предполагается, что должны чередоваться, так что выбор последовательных ядер максимально увеличивает нагрузку. Если бы 0 и 1 были на одном чипе, то простой код, который использовал только два ядра, потратил бы половину кеша.

Таким образом, нумерованные ядра должны сначала чередовать физические процессоры. Затем они должны поочередно умереть, если это возможно. Затем они должны пройти через ядра на одном кристалле. Затем они должны включать виртуальные ядра, если это возможно.

Итак, если у вас было два физических ЦП (P1, P2), каждое двухъядерное (C1, C2) и каждое гиперпоточное (V1, V2), ядра должны работать: P1C1V1, P2C1V1, P1C2V1, P2C2V1, P1C1V2, P2C1V2, P1C2V2, P2C2V2

Смысл в том, чтобы код, не понимающий топологию ЦП, мог просто захватить столько ядер, сколько он знает, как использовать и получить оптимальную производительность. Если бы вы могли поддерживать только два ядра, вам нужны P1C1V1 и P2C1V1, а не P1C1V1 и P1C1V2, иначе вы бы потратили огромное количество кеша и единиц выполнения.

...