плохой выигрыш от параллельной обработки на некоторых машинах Linux, хороший на других

плохой выигрыш от параллельной обработки на некоторых машинах Linux, хороший на других

Я измеряю время выполнения сложного алгоритма обработки сигналов, написанного на языке 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 помогло.

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