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

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

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

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

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

1 ответ1

0

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .