2013-03-14 73 views
2

全部創建多個線程。 我是OpenMP的開端。 我想使用OpenMP的是這樣的:未能用#pragma omp parallel爲

float* Arrays; 
int OneArrayLength = 100; 
float* ArrayPointers[ArrayNums]; 
for(int i = 0; i < ArrayNums; i ++) 
{ 
    ArrayPointers[i] = Arrays + i*OneArrayLength; 
} 
#pragma omp parallel for 
for i = 0 to LastPointer 
{ 
    Algorithm al; 
    al.process(ArrayPointers[i]) 
} 

,正如我希望它沒有工作。 我可以編譯代碼並運行它,但它沒有變得更快。

更新:感謝@nogard。設置項目設置以支持(openmp)真正奏效。 還有一個原因,我沒有解決這個問題。我使用Interl診斷工具來獲取.gap文件。它沒有給出這個循環的優化,但它可以給出一些關於如何優化其他循環的建議。 我對此感到困惑。

回答

4

我認爲問題是,你沒有把相應的項目設置:

Configuration Properties -> C/C++ -> Language -> Open MP Support -> Yes (/openmp) 

默認情況下,這個標誌沒有設置,所以OpenMP是簡單地禁用

要測試的OpenMP的數量你可以運行這個簡單的程序:

int iam = 0; 
int np = 1; 

#pragma omp parallel default(shared) private(iam, np) 
{ 
    #if defined (_OPENMP) 
    np = omp_get_num_threads(); 
    iam = omp_get_thread_num(); 
    #endif 
    std::cout << "Hello from thread " << iam << " out of " << np << std::endl; 
} 
+0

是的。你是對的!我在一個導出dll的項目中編寫這些代碼,導入dll的執行項目是另一個項目。所以我忘了把這個項目設置好。 – Steve 2013-03-14 23:06:51

+0

嗨,諾加德。非常感謝您的回答。我添加了一個原因,我沒有得到這個問題。你能回答嗎? – Steve 2013-03-14 23:17:48