2013-07-17 71 views
1

我想並行化一些代碼,但我遇到(大概是啞巴)問題。下面的示例代碼返回「12」,但我期望「21」。OpenMP:爲什麼這些omp並行部分不能用多線程執行?

omp_get_max_threads()返回8,omp_get_num_threads()返回1,omp_get_thread_num()返回0,當我在這個塊的任何位置調用它們。我想我可以得出結論,它只是由主線程順序執行。

#include <omp.h> 
#include <iostream> 
#include <Windows.h> 

using namespace std; 

int main() { 
    #pragma omp parallel sections num_threads(2) 
    { 
     #pragma omp section 
      { Sleep(200); 
       cout << "1"; } 
     #pragma omp section 
      { cout << "2"; } 
    } 
} 

我在做什麼錯?我如何強制這些部分的並行處理?

對於上下文:我是從兩個USB 3.0相機流式傳輸數據,並從每個相繼調用圖像是如此緩慢,我失去了幀。我想基本上爲每臺相機設置一條線,不斷要求它的圖像。

This問題有一個類似的標題,但沒有幫助。我正在使用Visual Studio 2010.

+2

您是否在項目設置中激活了omp支持,並且鏈接了lib? – ogni42

+0

您是否嘗試過nowait關鍵字? – Soravux

回答

1

評論是正確的:我忘了在項目設置中設置OMP支持。

值得注意的是,我可以從相機傳輸的幀數下降。使用的帶寬最大化並不像我想的那麼簡單。

相關問題