Процесс будет работать медленнее в одном потоке, а не в одном ядре

422
dzh

Так много процессоров теперь имеют 2/4 ядра и 4/8 потоков.

Есть также несколько процессоров с 4 ядрами и 4 потоками.

Означает ли это, что не имеющий аналогов процесс будет работать медленнее на одном и том же тактовом процессоре с процессором 8/4, чем на процессоре 4/4, поскольку он использует только половину ядра?

Есть ли программный способ (скажем, уровень ОС), чтобы установить процессор только на 1 поток на ядро?

2

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

1
Hennes

Означает ли это, что непараллельный процесс будет работать медленнее на одном и том же тактовом процессоре с 4-ядерным 8-потоковым ЦП, чем на 4-ядерном 4-потоковом ЦПУ, поскольку он использует только половину ядра?

Вроде да и нет.

Если я запускаю 8 независящих однопоточных программ на 8-ядерном (8-ступенчатом) процессоре, то каждое ядро ​​будет запускаться по одному шагу, и они будут работать на максимальной скорости (например, назначать все время, игнорируя такие вещи, как ОС, которая также требует некоторого времени процессора).

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

Пока что никаких сюрпризов.

Теперь с 4-ядерным (8 протекторным) процессором ОС считает, что есть 8 ядер. Это будет топтать их как первый случай. Однако это не совсем так; половина ядер не построена как обычные ядра. Обычно дублируется только часть функциональности, и если вам не повезет, один из протекторов остановится. Это не будет быстрее, чем процессор 4c / 4t.

Однако, если вам очень повезло (например, ALU удваиваются и вы чередуетесь между запросами, извлекающими информацию из памяти и добавляющими), тогда оба могут работать на полной скорости.

В среднем это приводит к увеличению скорости на 30%.


Чтобы сделать это еще более сложным: если ваши программы используют большие наборы данных, то запуск более 4 из них может привести к меньшему количеству обращений в кэш. Последнее действительно может замедлить ход событий.


Есть ли программный способ (скажем, уровень ОС), чтобы установить процессор только на 1 поток на ядро?

Да, поворот гипер-шага.

Вы можете сделать это в прошивке (например, в BIOS или в UEFI) или из ОС.

Например, для 8-тонного 4-ядерного процессора с ядрами 0 1 2 3, являющимися первыми ядрами, и 4 5 6 7, представляющими собой набор с тредами, который вы можете использовать:

echo 0 > /sys/devices/system/cpu/cpu4/online echo 0 > /sys/devices/system/cpu/cpu5/online echo 0 > /sys/devices/system/cpu/cpu6/online echo 0 > /sys/devices/system/cpu/cpu7/online 

IIRC FreeBSD сделал то же самое с помощью syscontrol. Для OSX или Windows вы должны были бы гуглить вокруг.

0
ClaireW

Потоки управляются программным обеспечением (например, Java VM), а ядра являются аппаратными. Внутри процессора может быть несколько ядер с разными схемами соединения. Каждое ядро ​​может обрабатывать поток, но это зависит от того, как ОС управляет каждым потоком.

Я рекомендую серию «Голос эксперта в микропроцессорах» от Apress для новейшего и лучшего по процессору аппаратного обеспечения.

Я рекомендую отличную книгу Пола Бучера о параллелизме потоков, потому что он также охватывает графические процессоры (Семь моделей параллелизма за семь недель).

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