Преимущества гиперпоточности для многопроцессорной обработки?
Я управляю вычислительным узлом в кластере HTC. Узел представляет собой двухпоточную машину Xeon с 56 ядрами и 112 потоками, а типичная рабочая нагрузка состоит из множества экземпляров однопоточных заданий моделирования Монте-Карло. Тесты показывают, что пропускная способность хорошо масштабируется при увеличении числа заданий примерно до 56, с некоторой нелинейностью из-за частот турбонаддува, которые не поддерживаются при большом количестве активных заданий. Все это имеет для меня смысл, и я бы сказал, что это ожидаемое поведение.
Чего я не до конца понимаю, так это того, что масштабирование почти полностью теряется при увеличении количества заданий. При увеличении числа заданий до 64 и выше, вплоть до 112, пропускная способность остается постоянной: преимущество параллельного выполнения большего количества заданий полностью нивелируется большей продолжительностью одного задания. Я знаю, что масштабирование для гиперпоточности далеко не линейное, но нулевое масштабирование меня немного удивило.
Основываясь на моих крайне ограниченных знаниях о принципе работы гиперпоточности, я предполагаю, что она может быть эффективной для запуска двух потоков одного и того же процесса, но не для запуска двух отдельных процессов. Мне нужно какое-то подтверждение по этому поводу, чтобы определенно исключить гипотезы о неисправности и, в конечном итоге, отключить гиперпоточность.
1 ответ
Упрощенная гиперпоточность использует тот факт, что во многих потоках процессов существует время простоя, когда ядро обычно ожидает завершения других задач. Переключаясь между двумя потоками, ядро процессора не будет простаивать в ожидании в одном потоке, а сможет сделать что-то полезное в другом потоке. См. https://www.intel.com/content/www/us/en/gaming/resources/hyper-threading.html .
В определенных рабочих нагрузках такое время ожидания может быть очень небольшим, и, таким образом, один поток уже полностью загружает одно ядро. Совместное использование этого ядра с другим потоком не принесет никакой общей выгоды.