質問

私はSnow LeopardのとLinux上でコードのこのビットをコンパイルし、私は別の結果を得ます。コアの私の数であり、雪ヒョウ、omp_get_max_threadsの最初の呼び出しは2を返し、上、Linux上で第二戻り1.ながら、両方の呼び出しは、コアの私の数であり、4を返します。私は右だ、Linuxは正しい動作を持っていると思いますか?両方正しいと私は、この関数の誤解がありますか?

#include <stdio.h>
#include <omp.h>

int main() {
  printf(" In a serial region; max threads are : %d\n", omp_get_max_threads());
#pragma omp parallel
{
  #pragma omp master
  printf(" In a parallel region; max threads are : %d\n", omp_get_max_threads());
}
}

マック出力ます:

 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
役に立ちましたか?

解決

このコールはよくOpenMPの仕様に指定されています。 Linuxは、ここに正しい行動を持っています。 それは言われて、あなたは効果的にシリアルで、メインスレッドをFHEマスター領域であり、そのスレッドは呼び出しnumが説明可能です。あなたは、私はC ++ TBBライブラリー、特に皆さんのサブセットを見ることをお勧めします純粋なCに縛らアレント場合は、ネストされた並列処理のためのような、より一般性とコンポーザがあります。私はここにタイプミスについて謝罪ので、私は、作业にしています。

他のヒント

アップルが提供するのgcc 4.2 [gccのバージョン4.2.1(アップル社は5566をビルド)] Leopardの上で、私は(私のMacBookが少ないのコアを持っていることを除いて)あなたと同じ結果を得ることができます。

In a serial region; max threads are : 2
In a parallel region; max threads are : 1
MacPortsのから4.3.4のための

同上ます。

しかし、MacPortsのからのgcc 4.4.2および4.5.0 20091231(実験)で、同じコンピュータ上で私が入手ます:

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

このは、Mac Linuxの対問題ではありませんが、同じように見えます原因gccのバージョンに。

P.S。 OpenMPのは、ネストされた並列処理を行うことができます。

ただ、リマインダーは、ワールドワイドのOpenMPの開発者だけでなく、OpenMPの専門家で読み取るだけのOpenMPに専念フォーラム、とがあります。これは、OpenMPの公式ウェブサイトで終わった: http://openmp.org/forumする

このような質問をすると、openmp.org

で他の多くのリソースを見つけるには絶好の場所

おかしいです。

:私は常にOS X 10.6.2と期待される動作を(4.2.1を使用して、5646ドット1を構築する)を取得します

私の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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top