質問
私は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