
저는 모두 Linux를 실행하는 여러 컴퓨터에서 C로 작성된 복잡한 신호 처리 알고리즘의 런타임을 측정하고 있습니다. 코드는 pthreads 라이브러리를 사용하는 일부 방법과 FFTW 패키지에서 제공하는 병렬 처리를 통해 부분적으로 병렬화됩니다. 4대의 컴퓨터 중 3대는 병렬 처리 계수 P가 1에서 컴퓨터의 물리적 코어 수로 증가함에 따라 실행 시간이 감소할 것으로 예상됩니다. 문제는 머신 중 하나가 반대 동작을 보인다는 것입니다. 즉, P=1에서 P=2로 이동하면 실행 시간이 늘어납니다.
코드는 네 시스템에서 동일하지만 하드웨어와 OS는 그렇지 않습니다. 하이퍼스레딩이 켜져 있습니다. 모두 큰 RAM을 가지고 있습니다.
toren: Ubuntu 18.04.5, 4.15.0-122-일반, 물리적 코어 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
12개: 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-일반 #57~18.04.1-Ubuntu, 물리적 코어 8개, Xeon(R) W-3225 CPU @ 3.70GHz, 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로 되돌려보았지만 결과는 비슷합니다.
코드는 각각 동일합니다. 동일한 Makefile(컴파일러 스위치)을 사용하여 gcc를 사용하여 각각을 컴파일합니다.
barra가 다른 사람들처럼 행동하지 않는 이유에 대한 아이디어가 있습니까?
감사해요,
씨
답변1
/sys/devices/system/cpu/cpu*/cpufreq/scaling_governor에서 CPU 거버너 설정을 "powersave"에서 "performance"로 변경하면 성공했습니다.