チーム内の各スレッドは、作業共有構成を除いて、並列の 領域内のすべての文を実行します。
私はこの単純なコード
#include <omp.h>
#include <stdio.h>
int main(){
omp_set_dynamic(0);
omp_set_num_threads(32);
int tid;
double *myvector;
#pragma omp parallel shared(myvector) private(tid)
{
tid = omp_get_thread_num();
printf("Thread number = %d\n",tid);
// Do some calculations using myvector[tid]
}
return 0;
}
を試してみましたが、正しい結果を得た:
Thread number = 3
Thread number = 4
Thread number = 0
Thread number = 5
Thread number = 6
Thread number = 7
Thread number = 8
Thread number = 9
Thread number = 10
Thread number = 11
Thread number = 12
Thread number = 13
Thread number = 14
Thread number = 15
Thread number = 1
Thread number = 2
、あなたのマシン上でそれを確認するか、あなたがしようとしたコードと、あなたが得た出力に関する詳細な情報を入力してください。
計算にはどのくらいの時間がかかりますか?あなたのCPUはいくつのスレッドをサポートしていますか?たとえば、各OMPスレッドが2つの計算を実行する場合、tidsは重複する可能性があります。あなたは(for)ループを試しましたか? – 1201ProgramAlarm
私はクラスター上で実行しているので、ノードあたり16プロセッサーがあります。彼らは長い時間がかからなくてもスレッドごとに1つの計算を実行する方法がありますか?私は質問は、不明瞭な再現性がないと非常に広いです怖い –
(彼らは、データセットに応じて、時間を分からどこでも取ります)。あなたは、あなたが何をしているか、あなたが何を期待しているか、あなたが何を観察しているかをより正確に記述する必要があります。 [mcve]にコンパイルと実行の正確な記述とそれを実行する環境(コンパイラ!)を提供してください。複数のノードで実行していますか? 「*計算*」とは何ですか? – Zulan