我正在使用OpenMP與我的嵌套循環進行多線程。由於對這個東西不熟悉,我不確定我是否以正確的方式使用OpenMP,以便它實際上可以執行並行編程。所以我想知道我是否可以衡量使用OpenMP的C++程序的性能,以便我可以告訴它實際可行,並且我處於正確的軌道上?就像有多少個線程並行運行一樣,每個線程需要多長時間才能完成。 謝謝,問候!如何判斷OpenMP是否在我的C++程序中工作
回答
#include <omp.h>
...
int target_thread_num = 4;
omp_set_num_threads(target_thread_num);
unsigned long times[target_thread_num];
// Initialize all the times
#pragma omp parallel
{
int thread_id = omp_get_thread_num();
times[thread_id] = start_time();
std::cout << "Thread number: " << omp_get_thread_num() << endl;
times[thread_id] = end_time();
}
...
顯然你需要提供兩個定時器功能,但這是主要的。 OMP功能非常明瞭。還要確保您的環境設置正確,並且正在使用適當的機制進行編譯。 g ++選項是-fopenmp。在Visual Studio上轉到項目設置,C++語言,並啓用「OpenMP支持」。
您可以在Windows上使用Windows任務管理器(CTRL-SHIFT-ESC)來監視CPU使用情況,或者在* nix框頂部。
只是檢查是否使用了許多核心或不
您可以使用調試器(Visual Studio中,如果你使用的是Windows)到:
- 看看如何可以線程在運行
- 看該代碼其中的每一個運行
- 暫停他們中的一些,而讓其他人繼續
你知道如何在Linux上使用gdb /做這些嗎? – Tim 2009-08-19 20:58:26
這應該有所幫助:http://www.delorie.com/gnu/docs/gdb/gdb_25.html另請參閱該頁面底部的鏈接。 (注意:我發現與谷歌;我不是一個GDB用戶。) – RichieHindle 2009-08-19 21:15:27
在Linux上,你總是可以使用'頂部'來查看你所有的核心,並檢查他們在做什麼。 – Anna 2009-08-27 10:51:08
- 1. 我如何判斷ajax是否工作?
- 2. 如何判斷「內聯」是否工作?
- 3. 如何判斷我的星火工作是否正在進行?
- 4. 我的Perl程序如何判斷是否在mod_perl下運行?
- 5. 如何判斷我的應用程序是否已暫停?
- 6. 如何判斷我在Oracle事務中是否有未提交的工作?
- 7. python程序如何判斷它是否在emacs中運行?
- 8. 如何在python中判斷外部程序是否打開?
- 9. 如何判斷OpenShift上的cron作業是否正常工作?
- 10. 如何判斷在我的iPhone應用程序中是否按下了按鈕?
- 11. 如何判斷安裝程序是否有卸載程序?
- 12. OpenMP是否在MFC應用程序中工作?
- 13. 如何判斷openmp不同步陣列
- 14. 應用程序如何判斷它是否在hackintosh上運行?
- 15. 如何判斷全屏應用程序是否正在運行?
- 16. 如何判斷OrbBasic程序是否正在運行
- 17. 如何判斷Request.Form中的值是否是一個數字? (C#)
- 18. 如何判斷我寫的程序是32位還是64位?
- 19. 如何判斷ID是否是Facebook應用程序或用戶
- 20. 如何判斷我的動作是否由RenderAction調用?
- 21. 如何判斷我的jQuery代碼是否在iFrame中運行?
- 22. 如何判斷我的Javascript代碼是否在Jint中運行?
- 23. 如何判斷一個EC2實例是否在我的VPC中?
- 24. 如何判斷我的Java組件是否在Applet中?
- 25. 如何判斷我的Titanium應用程序是否在模擬器上運行?
- 26. 如何判斷我的程序是否在域控制器上運行?
- 27. 如何判斷我是否是「最新」的ASP.NET應用程序域?
- 28. 如何判斷緩存是否正常工作。 Rails 4
- 29. 如何判斷Spark工作是否成功?
- 30. 如何判斷當前工作目錄是否被Git忽略?
我很抱歉讓OpenMP與OpenMPI混淆!感謝德克Eddelbuettel禮貌地指出我的錯誤! – 2009-08-19 20:48:07