2010-01-16 71 views
1

我在Snow Leopard和linux上編譯了這部分代碼,並得到了不同的結果。在Snow leopard中,omp_get_max_threads的第一個調用返回2,這是我的核心數量,而第二個返回1.在Linux上,兩個調用返回4,這是我的核心數。我認爲Linux有正確的行爲,對嗎?都是正確的,我只是誤解了這個函數?並行區域中omp_get_max_threads的行爲

​​

Mac的輸出:

In a serial region; max threads are : 2 
In a parallel region; max threads are : 1 

Linux的輸出:

In a serial region; max threads are : 4 
In a parallel region; max threads are : 4 
+0

您使用的是哪個gcc? 4.0或4.2? – bmargulies 2010-01-16 19:40:19

+0

Mac:gcc version 4.2.1(Apple Inc. build 5646)(dot 1) Linux:gcc版本4.4.1 [gcc-4_4-branch revision 150839](SUSE Linux) 實際上,做了一些更多的測試,運行gcc版本4.1.1的RHEL 5 20070105(Red Hat 4.1.1-52)給出了我爲mac描述的行爲 – cowsandmilk 2010-01-16 19:56:13

回答

2

此調用OpenMP的規範很好規定。 linux在這裏有正確的行爲。 就是這樣說的,你在一個主要區域,它是有效地串行和主線程,所以num線程調用是可以解釋的。如果你沒有綁定到純c,我會鼓勵你看看C++ tbb庫,特別是ppl子集,你會發現更多的一般性和可嵌套並行性的可組合性。我在手機上,所以我在這裏爲錯別字道歉。

1

在Leopard上使用Apple提供的gcc 4.2 [gcc version 4.2.1(Apple Inc. build 5566)],我得到與您相同的結果(除了我的MacBook具有較少的內核)。

In a serial region; max threads are : 2 
In a parallel region; max threads are : 1 

同上來自MacPorts的4.3.4。

然而,用gcc 4.4.2和4.5.0 20091231(實驗)從MacPorts的,在同一臺計算機上,我得到:

In a serial region; max threads are : 2 
In a parallel region; max threads are : 2 

它看起來這是不是Mac與Linux的比較問題,但由於gcc版本。

P.S. OpenMP可以執行嵌套並行操作。

0

提醒一下,有一個專門針對OpenMP的論壇,由OpenMP的開發人員以及OpenMP專家在全球範圍內閱讀。這是在在官方網站上的OpenMP:http://openmp.org/forum

大的地方要問這樣的問題,並在openmp.org

0

怪異找了很多其他資源。我總是得到預期的行爲(使用4.2.1,打造5646點1)與OS X 10.6.2:

在我的Mac Pro

In a serial region; max threads are : 8 
In a parallel region; max threads are : 8 

和我的iMac

In a serial region; max threads are : 2 
In a parallel region; max threads are : 2 

必須在這裏發生其他事情。編譯只是?

gcc fname.c -fopenmp