
Estoy midiendo el tiempo de ejecución de un complejo algoritmo de procesamiento de señales escrito en C en varias computadoras diferentes, todas con Linux. El código está parcialmente paralelizado por algunos de mis propios métodos que utilizan la biblioteca pthreads y por el procesamiento paralelo que ofrece el paquete FFTW. Tres de las cuatro computadoras muestran reducciones esperadas en el tiempo de ejecución a medida que el factor de paralelismo P aumenta de 1 al número de núcleos físicos de la máquina. El problema es que una de las máquinas muestra el comportamiento opuesto: pasar de P=1 a P=2 produce un aumento en el tiempo de ejecución.
El código es idéntico en las cuatro máquinas, pero el hardware y los sistemas operativos no lo son. Hyperthreading está activado. Todos tienen RAM de gran tamaño.
toren: Ubuntu 18.04.5, 4.15.0-122-generic, 4 núcleos físicos, CPU Xeon(R) E3-1535M v5 @ 2.90GHz, gcc versión 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
doce: Fedora Core 31, 5.8.15-101.fc31.x86_64, 12 núcleos físicos, CPU Xeon(R) X5650 a 2,67 GHz, gcc versión 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
flash: Fedora Core 31, 5.8.15-101.fc31.x86_64, 28 núcleos físicos, CPU Xeon(R) E5-2697 v3 a 2,60 GHz, gcc versión 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 núcleos físicos, CPU Xeon(R) W-3225 a 3,70 GHz, gcc versión 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
Intenté revertir el kernel de barra a 4.15, pero el resultado es similar.
El código es idéntico en cada uno, uso gcc para compilar en cada uno, con el mismo Makefile (cambios de compilador).
¿Alguna idea de por qué barra no se comporta como los demás?
Gracias,
C
Respuesta1
Cambiar la configuración del regulador de la CPU de "ahorro de energía" a "rendimiento" en /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor funcionó.