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

2

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

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

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

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

dzh
источник
Вы не работаете "в потоке". Процессы Создайте темы и темы - это то, что работает. Потоки работают на «логическом процессоре». Если у вас включена поддержка гиперпоточности, каждое ядро ​​ЦП предоставляет два LP, в противном случае - только один.
Jamie Hanrahan

Ответы:

1

Означает ли это, что беспрецедентный процесс будет работать медленнее на одном и том же тактовом процессоре с 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 вам нужно будет погуглить.

Hennes
источник
-1

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

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

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

ClaireW
источник