Оказывает ли процесс, заполняющий все логические ядра, отрицательное влияние на производительность?

Оказывает ли процесс, заполняющий все логические ядра, отрицательное влияние на производительность?

Из-за гиперпоточности мой ЦП имеет 2 логических процессора на ядро. Если я правильно понимаю посыл гиперпоточности, она позволяет каждому ядру иметь отдельный кэш и указатель инструкций для 2 отдельных потоков одновременно, но ненетпозволяют одновременное выполнение 2 потоков одним ядром. Таким образом, это в основном просто смягчает высокие накладные расходы на подкачку потоков, то есть, негативное влияние на производительность, возникающее из-за того, что потоков выполняется больше, чем ядер для их выполнения, уменьшается. Однако я все равно ожидаю, что будетнекоторыйнакладные расходы, инекоторыйотрицательное влияние на производительность при запуске, например, 16 потоков в системе всего с 8 физическими ядрами.

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

решение1

Это зависит.

В общем, запуск одного программного потока на поток ЦП даст лучшую производительность. Я регулярно вижу ускорение на 10% по сравнению с запуском одного программного потока на ядро ​​ЦП - так что вместо одного программного потока, работающего на 100%, у меня есть два программных потока, каждый из которых работает на 55%.

Но я также видел более высокую производительность бегаменьшепроцессов, чем ядер ЦП, если несколько ядер используют один и тот же кэш. Однако это случается исключительно редко.

Обычно следует использовать все 16 потоков ЦП, но единственный способ узнать это наверняка в вашей системе — провести измерение.

Связанный контент