在沒有sudo權限的機器上剖析與OpenMP並行的C++程序的最簡單方法是什麼?剖析OpenMP並行化的C++代碼
回答
我會推薦使用英特爾VTune Amplifier XE探查器。
基本熱點分析不需要root權限,您甚至可以在不使用sudoers的情況下安裝它。
對於OpenMP分析,最好使用英特爾OpenMP實施進行編譯,並在運行配置文件會話之前將環境變量KMP_FORKJOIN_FRAMES設置爲1。這將使工具能夠可視化每個平行區域從叉點到連接點的時間區域。這給出了一個很好的想法,即你有足夠的並行性以及你沒有做到的地方。通過使用像框架域/框架類型/功能這樣的網格分組,您還可以將並行區域與CPU上發生的事情相關聯,從而可以查找不會縮放的功能。例如,假設像下面這樣簡單的代碼運行一些平衡的工作,然後一些串行工作,然後一些不平衡的工作調用delay()函數來確保所有這些都確保delay()不內聯。這模仿真實負載,其中各類不熟悉的功能,可以從並行區域使其更難被調用來分析並行性是否是通過尋找到剛剛熱功能簡介好壞:
void __attribute__ ((noinline)) balanced_work() {
printf("Starting ideal parallel\n");
#pragma omp parallel
delay(3000000);
}
void __attribute__ ((noinline)) serial_work() {
printf("Starting serial work\n");
delay(3000000);
}
void __attribute__ ((noinline)) imbalanced_work() {
printf("Starting parallel with imbalance\n");
#pragma omp parallel
{
int mythread = omp_get_thread_num();
int nthreads = omp_get_num_threads();
delay(1000000);
printf("First barrier %d\n", mythread);
#pragma omp barrier
delay(mythread * 25000 + 200000);
printf("Second barrier %d\n", mythread);
#pragma omp barrier
delay((nthreads - 1 - mythread) * 25000 + 200000);
printf("Join barrier %d\n", mythread);
}
}
int
main(int argc, char **argv)
{
setvbuf(stdout, NULL, _IONBF, 0);
calibrate();
balanced_work();
serial_work();
imbalanced_work();
printf("Bye bye\n");
}
對於這個代碼的典型函數配置文件將顯示在delay()函數中花費的大部分時間。另一方面,通過VTune中的幀分組和CPU使用率信息查看數據,可以瞭解什麼是串行,什麼是不平衡和什麼是平衡的。以下是你可能會看到VTune™可視化:
在這裏,人們可以看到:
- 有當我們執行一個不平衡的區域經過時間13.671。人們可以看到來自CPU使用率故障的不平衡。
- 經過時間有3.652次非常平衡。這裏有一些紅色的時間,這可能是一些系統的影響 - 值得在真實案例中進行調查。
- 然後我也有約4秒的連續時間。弄清楚它是4秒是目前有點棘手 - 你必須從總結(我的情況下是21.276)花費時間,從它減去13.671和3.652產生四。但很容易。
希望這會有所幫助。
是否還有其他KMP_ *選項,即特定於英特爾實施的OpenMP選項?我無法找到列表... – pascal
KMP_ *環境變量的完整列表應該作爲編譯器文檔的一部分提供。 –
- 1. C gperftools - 剖析C代碼
- 2. OpenMP代碼並行
- 3. openmp代碼(並行)與串行代碼的性能分析
- 4. 剖析Ruby代碼
- 5. 如何剖析OpenMP瓶頸
- 6. OpenMP C並行化算法
- 7. C#代碼優化,剖析,應用程序優化
- 8. 使用openmp並行化c代碼問題
- 9. 使用OpenMP並行化C++代碼不會提高性能
- 10. OpenMP的 - 運行並行代碼
- 11. 生產剖析代碼
- 12. ARM代碼剖析器
- 13. 如何剖析代碼段?
- 14. Android本機代碼剖析
- 15. 剖析SWIG Python代碼
- 16. 通過openmp並行化C++中的three_for_loop
- 17. 並行化功能,用C的OpenMP
- 18. OpenMP並行化代碼運行速度較慢
- 19. openMp:並行化std :: map迭代
- 20. OpenMP並行代碼與串行代碼的輸出不相同
- 21. OpenMP的代碼如何可以並行化?
- 22. 程序並行化使用OpenMP C++
- 23. openMP的並行化效率
- 24. 使用顯式OpenMP任務剖析OpenMP程序
- 25. 剖析php代碼的解釋結果
- 26. 將OpenMP代碼編譯爲C代碼
- 27. 作爲後臺服務運行的行剖析python代碼
- 28. OpenMP並行化循環
- 29. OpenMP和並行化問題
- 30. 與openmp並行化streamcluster
到目前爲止發現了什麼_you_? –
Tau,OmpP,LIKWID都需要root權限:-( – lodhb