
Я измеряю время выполнения сложного алгоритма обработки сигналов, написанного на языке C, на нескольких разных компьютерах, все из которых работают под управлением Linux. Код частично распараллелен некоторыми моими собственными методами с использованием библиотеки pthreads и параллельной обработкой, предоставляемой пакетом FFTW. Три из четырех компьютеров показывают ожидаемое уменьшение времени выполнения по мере увеличения коэффициента параллелизма P с 1 до числа физических ядер на машине. Проблема в том, что одна из машин показывает противоположное поведение: переход от P=1 к P=2 приводит к увеличению времени выполнения.
Код на четырех машинах идентичен, но оборудование и ОС — нет. Гиперпоточность включена. У всех большой объем оперативной памяти.
toren: Ubuntu 18.04.5, 4.15.0-122-generic, 4 физических ядра, Xeon(R) CPU E3-1535M v5 @ 2.90GHz, gcc версии 7.5
[email protected]>./ssca2_parallelism
P = 1 ssca2: elapsed PROGRAM TIME 1.025756e+01
P = 2 ssca2: elapsed PROGRAM TIME 7.500780e+00
P = 4 ssca2: elapsed PROGRAM TIME 6.246292e+00
P = 8 ssca2: elapsed PROGRAM TIME 5.483851e+00
P = 16 ssca2: elapsed PROGRAM TIME 7.457973e+00
P = 32 ssca2: elapsed PROGRAM TIME 8.497999e+00
P = 64 ssca2: elapsed PROGRAM TIME 1.035557e+01
двенадцать: Fedora Core 31, 5.8.15-101.fc31.x86_64, 12 физических ядер, Xeon(R) CPU X5650 @ 2.67GHz, gcc версии 9.3
[email protected]>./ssca2_parallelism
P = 1 ssca2: elapsed PROGRAM TIME 1.833605e+01
P = 2 ssca2: elapsed PROGRAM TIME 1.171951e+01
P = 4 ssca2: elapsed PROGRAM TIME 8.526402e+00
P = 8 ssca2: elapsed PROGRAM TIME 7.255262e+00
P = 16 ssca2: elapsed PROGRAM TIME 1.268390e+01
P = 32 ssca2: elapsed PROGRAM TIME 1.188247e+01
P = 64 ssca2: elapsed PROGRAM TIME 1.417718e+01
флэш-память: Fedora Core 31, 5.8.15-101.fc31.x86_64, 28 физических ядер, Xeon(R) CPU E5-2697 v3 @ 2.60GHz, gcc версии 9.3
[email protected]>./ssca2_parallelism
P = 1 ssca2: elapsed PROGRAM TIME 1.462457e+01
P = 2 ssca2: elapsed PROGRAM TIME 1.066421e+01
P = 4 ssca2: elapsed PROGRAM TIME 8.244503e+00
P = 8 ssca2: elapsed PROGRAM TIME 7.694590e+00
P = 16 ssca2: elapsed PROGRAM TIME 1.030944e+01
P = 32 ssca2: elapsed PROGRAM TIME 1.079129e+01
P = 64 ssca2: elapsed PROGRAM TIME 1.413906e+01
barra: Ubuntu 18.04.4, 5.4.0-52-generic #57~18.04.1-Ubuntu, 8 физических ядер, процессор Xeon(R) W-3225 с тактовой частотой 3,70 ГГц, gcc версии 7.5
[email protected]>./ssca2_parallelism
P = 1 ssca2: elapsed PROGRAM TIME 8.891541e+00
P = 2 ssca2: elapsed PROGRAM TIME 1.006297e+01
P = 4 ssca2: elapsed PROGRAM TIME 8.619259e+00
P = 8 ssca2: elapsed PROGRAM TIME 7.233214e+00
P = 16 ssca2: elapsed PROGRAM TIME 7.765741e+00
P = 32 ssca2: elapsed PROGRAM TIME 8.301655e+00
P = 64 ssca2: elapsed PROGRAM TIME 1.114389e+01
Я попробовал вернуть ядро Barra к версии 4.15, но результат тот же.
Код в обоих случаях идентичен, для компиляции я использую gcc с одним и тем же Makefile (ключами компилятора).
Есть идеи, почему Барра ведет себя не так, как остальные?
Спасибо,
С
решение1
Изменение настроек регулятора ЦП с «powersave» на «performance» в /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor помогло.