2013-05-19 51 views
0

慢,我相信每個人都同意這個帖子的標題。有人能指出我的原因嗎?任何對書籍等的引用?我試圖找到但沒有運氣。原因OMP_SET_NUM_THREADS(1)比沒有OpenMP的

我相信原因是一些關於OpenMP擁有同步開銷,沒有OpenMP的項目沒有。

希望有人能擴大的原因嗎?

感謝

+2

你能表現出[SSCCE(http://sscce.org/)?一般來說,OpenMP會增加代碼的開銷。所以即使你沒有線程,你仍然會遇到開銷。 – Mysticial

回答

0

至於神祕的解釋,這可能是由於OpenMP的開銷。我試圖通過這樣做來解決這個問題,例如:

#pragma omp parallel for if(nthreads>1) 

我認爲如果nthreads> 1,這隻會使用OpenMP開銷。但是,至少在Visual Studio 2012中,這也有很大的開銷。因此,爲了正確比較一個函數的單線程和多線程版本,我定義了有和沒有OpenMP pragmas的兩個函數版本。

1

即使使用OpenMP即使只有一個線程,運行時也會有一些開銷,但更重要的問題可能是編譯器必須執行的代碼轉換才能生成OpenMP代碼(特別是概述並行區域代碼分成不同的函數[由gcc和icc完成; PGI做了一些不同的...])將影響其他代碼優化(如矢量化)。 ,編譯器在一個單一的功能,它允許優化時的代碼的部分中所概述的功能被執行時可能會丟失,因此所生成的代碼可能會加重病情信息。

相關問題