Bitonic Merge Sort Profiler 疑問

助教您好,我使用課堂教的 vtune 查看運行時間,但 vtune, MPI_Wtime 和心算的結果似乎不太一樣。

另外,CPU 使用率異常低,我猜測 openmp 每次創建新的 thread,執行完再丟掉,而 vtune 將所有 thread 納入計算,望助教能指點迷津。

vtune: 19.885 秒
MPI_Wtime: 4 個 Process 皆在 1.57 秒左右
心算時間: 約 6 秒

以下是 qsub 時的配置:

#!/bin/bash        		
#PBS -P ACD112218
#PBS -q ct160       	
#PBS -l nodes=1:ppn=40
#PBS -l walltime=00:05:00

module purge
module load mpi/openmpi-4.0.5/gcc930
. /pkg/intel/2019_u5/vtune_amplifier/amplxe-vars.sh 
export LC_CTYPE=en_US

cd ${PBS_O_WORKDIR:-"."}
rm -r vtune-hpc

mpicc -O2 -o bitonic_mergesort bitonic_mergesort.cc -fopenmp
amplxe-cl -collect hpc-performance -r vtune-hpc mpirun --mca btl_openib_allow_ib 1 -np 4 ./bitonic_mergesort 20240201 testcase/input3 output

抱歉我們在澳洲鬼混所以比較晚回,網路太爛了><

關於時間的問題:
From vtune wiki, the Elapsed Time shows the total runtime of the application including Idle times.

然後MPI_Wtime囊括的範圍可能是你沒有全部包住?檢查一下有沒有包刮I/O的操作。

至於CPU utilization可能是I/O太多,或是你的截圖中也有顯示 1.571 out of 40,可以看出他把你的40個core都算進去了。

可以給我們更多資訊,比如你openmp是怎麼操作的?或是你跑correctness跑出的執行時間,這樣我們比較能完整地回答~

另外,vtune應該只有profile和cpu core有關的操作,跟openmp的thread應該無關。

MPI_Wtime 全部包住後平均 1.83 秒。

請問 Idle times 是怎麼產生的?
為何 Elapsed Time 超過跑 correctness 的時間?

由於 openmp 操作涉及答案內容,我透過 discourse 私訊給您。

我們猜測可能是vtune在計算elapsed time的時候會把其他process開到同一個core上的thread時間也算進去,
請你試試看profile時不要使用openmp看結果如何,另外通常vtune的elapsed time不會作為很準確的參考,porfiler本來就會增加執行時間,只是你測出來的情況確實多太多了。

另外,vtune的Idle time是指
By default, if the CPU Time on all threads is less than 0.5 of 100% CPU Time on 1 core, such CPU usage is classified as idle.

不過你的情況也不太像是和這個有關係。

甘溫

時間稍微正常了,但 CPU Utilization 還是很差,可能是程式的問題。

你看一下你截的圖的右上角,他是用40個logical cores幫你計算utilization的,如果你本來mpi process就開很少了,這個utiliztion就不準確,你可以試試看修改你的job script讓vtune測試出你想要並正確的結果。

可是我 process 指定 32 個

#!/bin/bash        		
#PBS -P ACD112218
#PBS -q ct160       	
#PBS -l nodes=1:ppn=32
#PBS -l walltime=00:05:00

module purge
module load intel/2019_u5
. /pkg/intel/2019_u5/vtune_amplifier/amplxe-vars.sh 
export LC_CTYPE=en_US

cd ${PBS_O_WORKDIR:-"."}
rm -r vtune-hpc

mpicc -O2 -o bitonic_mergesort bitonic_mergesort.cc
amplxe-cl -collect hpc-performance -r vtune-hpc mpirun -np 32 ./bitonic_mergesort 987648 testcase/input8 output