Влияние гиперпоточности на производительности компилятора?

Скажите, что мы хотим скомпилировать крупный проект (скажите что GCC или ядро Linux), максимально быстро. ЦП с возможностью гиперпоточности (говорят, что Core i7 Intel), запускает компилятор немного быстрее с гиперпоточностью, включенной или отключенной? Там кто-либо публикуется сравнительные тесты, которые тестируют это?

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

Таким образом для рабочей нагрузки компилятора, производительность увеличивается? Если так, сколько?

21
задан Jay Conrod 6 January 2010 в 18:07
поделиться

2 ответа

Компиляция coreutils-8.4 в Ubuntu 8.04 x86

Intel Atom 1,6 ГГц с включенным HT:

~/coreutils-8.4$ make clean > /dev/null
~/coreutils-8.4$ time make > /dev/null

real    2m33.375s
user    2m22.873s
sys     0m10.541s
~/coreutils-8.4$ make clean > /dev/null
~/coreutils-8.4$ time make -j2 > /dev/null

real    1m54.707s
user    3m26.121s
sys     0m13.821s
~/coreutils-8.4$ make clean > /dev/null
~/coreutils-8.4$ time make > /dev/null

real    2m33.372s
user    2m22.753s
sys     0m10.657s
~/coreutils-8.4$ make clean > /dev/null
~/coreutils-8.4$ time make -j2 > /dev/null

real    1m54.851s
user    3m26.145s
sys     0m13.685s
~/coreutils-8.4$

Таким образом, Hyper-Threading сокращает время выполнения до 75%, что эквивалентно увеличению вычислительной мощности на 33% . (Я запускал их дважды, чтобы убедиться, что все находится в кеше памяти.)

А вот контрольный эксперимент, показывающий, что make -j2 сам по себе не улучшает скорость компиляции coreutils-8.4 в Ubuntu 8,04 x86

Одноядерное ядро ​​2 Quad 2,5 ГГц ВМ (без HT):

~/coreutils-8.4$ make clean > /dev/null
~/coreutils-8.4$ time make > /dev/null

real    0m44.453s
user    0m38.870s
sys     0m5.500s
~/coreutils-8.4$ make clean > /dev/null
~/coreutils-8.4$ time make -j2 > /dev/null

real    0m45.131s
user    0m40.450s
sys     0m4.580s
~/coreutils-8.4$ make clean > /dev/null
~/coreutils-8.4$ time make > /dev/null

real    0m44.621s
user    0m39.090s
sys     0m5.340s
~/coreutils-8.4$ make clean > /dev/null
~/coreutils-8.4$ time make -j2 > /dev/null

real    0m45.165s
user    0m40.390s
sys     0m4.610s
~/coreutils-8.4$
26
ответ дан 29 November 2019 в 21:38
поделиться

Все зависит от того, записан ли компилятор многопоточным или нет. Если это так, то определенно гиперпоточность немного ускоряет процесс, так как тогда операционная система может планировать различные части потоков компилятора на разные ядра. Я согласен с Кеном, что компиляторы обычно более связаны по объему ввода/вывода, чем интенсивно обрабатывают, так что наличие скоростного жесткого диска было бы более необходимым, чем наличие скоростного процессора со 100 ядрами

.
0
ответ дан 29 November 2019 в 21:38
поделиться
Другие вопросы по тегам:

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