2009-08-19 110 views
5

我正在使用OpenMP與我的嵌套循環進行多線程。由於對這個東西不熟悉,我不確定我是否以正確的方式使用OpenMP,以便它實際上可以執行並行編程。所以我想知道我是否可以衡量使用OpenMP的C++程序的性能,以便我可以告訴它實際可行,並且我處於正確的軌道上?就像有多少個線程並行運行一樣,每個線程需要多長時間才能完成。 謝謝,問候!如何判斷OpenMP是否在我的C++程序中工作

+0

我很抱歉讓OpenMP與OpenMPI混淆!感謝德克Eddelbuettel禮貌地指出我的錯誤! – 2009-08-19 20:48:07

回答

9
#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支持」。

1

您可以在Windows上使用Windows任務管理器(CTRL-SHIFT-ESC)來監視CPU使用情況,或者在* nix框頂部。

只是檢查是否使用了許多核心或不

1

您可以使用調試器(Visual Studio中,如果你使用的是Windows)到:

  • 看看如何可以線程在運行
  • 看該代碼其中的每一個運行
  • 暫停他們中的一些,而讓其他人繼續
+0

你知道如何在Linux上使用gdb /做這些嗎? – Tim 2009-08-19 20:58:26

+0

這應該有所幫助:http://www.delorie.com/gnu/docs/gdb/gdb_25.html另請參閱該頁面底部的鏈接。 (注意:我發現與谷歌;我不是一個GDB用戶。) – RichieHindle 2009-08-19 21:15:27

+0

在Linux上,你總是可以使用'頂部'來查看你所有的核心,並檢查他們在做什麼。 – Anna 2009-08-27 10:51:08

相關問題