2017-04-14 16 views
0

私はOpenMPをC++で使用しています。私はスレッド数を指定し(16)、0から15までのidで各スレッドを実行したい。 私はそれぞれのスレッドでパラメータとして使用したい16の数値の配列を持っている。だから私は持っているOpenMPのC++で順序付けられたスレッドID

しかし、(tid)は0から15の順序ではありません。いくつかは2回以上繰り返されます。 16個の各パラメータで1つのタスクを実行するにはどうすればよいですか?

+0

計算にはどのくらいの時間がかかりますか?あなたのCPUはいくつのスレッドをサポートしていますか?たとえば、各OMPスレッドが2つの計算を実行する場合、tidsは重複する可能性があります。あなたは(for)ループを試しましたか? – 1201ProgramAlarm

+0

私はクラスター上で実行しているので、ノードあたり16プロセッサーがあります。彼らは長い時間がかからなくてもスレッドごとに1つの計算を実行する方法がありますか?私は質問は、不明瞭な再現性がないと非常に広いです怖い –

+0

(彼らは、データセットに応じて、時間を分からどこでも取ります)。あなたは、あなたが何をしているか、あなたが何を期待しているか、あなたが何を観察しているかをより正確に記述する必要があります。 [mcve]にコンパイルと実行の正確な記述とそれを実行する環境(コンパイラ!)を提供してください。複数のノードで実行していますか? 「*計算*」とは何ですか? – Zulan

答えて

1

チーム内の各スレッドは、作業共有構成を除いて、並列の 領域内のすべての文を実行します。

私はこの単純なコード

#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 

、あなたのマシン上でそれを確認するか、あなたがしようとしたコードと、あなたが得た出力に関する詳細な情報を入力してください。

関連する問題