pthread_attr_setaffinity_np и логическое ядро

237
Tushar Goyal

Меня немного смущают логические ядра процессора, физические ядра и сходство планировщика. Давайте предположим, что есть 4-ядерный процессор, каждый из которых поддерживает 2 гиперпотока. Отныне согласно /cpu/procinfoлогическому ядру 0 и логическому ядру 8 по сути являются одним и тем же физическим ядром.

Теперь предположим две темы:

Случай I: два потока запускаются pthread_attr_setaffinity_npс логическим ядром 0.

Случай II: один поток запускается с pthread_attr_setaffinity_npлогическим ядром 0, а другой - с логическим ядром 8

Будет ли разница в обоих случаях?

0

1 ответ на вопрос

0
David Schwartz

Да, будет существенная разница. Если оба потока установлены на логическое ядро ​​0, два потока никогда не будут работать одновременно и по очереди будут использовать логическое ядро ​​0. С одним потоком на логическое ядро ​​0, а другой - на логическое ядро ​​8, два потока могут работать на в то же время, разделяя ресурсы в этом физическом ядре.

Представьте себе, если один поток выполняет почти полностью целочисленные операции, а другой - почти полностью операции с плавающей запятой. Если они оба связаны с логическим ядром 0, физическое ядро ​​будет чередовать, если его целые единицы простаивают, а его единицы с плавающей запятой простаивают. Если для одного установлено значение 0, а для другого - 8, один поток может использовать целочисленные единицы, тогда как другой поток использует единицы с плавающей запятой физического ядра.

Почему это случилось? На аппаратном уровне физическое ядро ​​не имеет понятия логических ядер. Он просто пытается выполнить столько инструкций из нескольких доступных контекстов выполнения. Tushar Goyal 6 лет назад 0
@TusharGoyal На аппаратном уровне физическое ядро ​​имеет два набора всего, что специфично для логического потока, такого как регистры. Эти два набора контекстов выполнения совместно используют блоки выполнения. Если оба потока используют одно и то же логическое ядро, для физического ядра одновременно доступен только один контекст выполнения. Если каждый поток находится на отдельном логическом ядре, то оба контекста исполнения доступны для физического ядра одновременно. David Schwartz 6 лет назад 0

Похожие вопросы