2017-08-18 1 views
0

パフォーマンスを向上させるためにデータベース内部プロジェクトにOpenMPを使用しようとしています。このプログラムからコンソールに何かを印刷する方法がないので、実行時間(omp_get_wtime()を使用しています)をファイルに保存する必要があります。より良い方法があればお勧めします。私はすべてのスレッド(以下のコードを参照)から1つのファイルに書き込もうとしましたが、スレッド数が複数の場合はクラッシュします。助けてください。前もって感謝します。OpenMPの複数スレッドのファイルにwtimeの違いを保存する方法は?

FILE *fp = NULL; 
    fp = fopen("/home/fopen.txt","a"); 
    ... 
    omp_set_num_threads(2); 
    fprintf(fp,"Num of threads: %d\n",omp_get_num_threads()); 


#pragma omp parallel default(shared) private(tid) 
    { 
     tid = omp_get_thread_num(); 

     #pragma omp critical 
     fprintf(fp,"ThreadID of this thread is %d\n",tid); 
     : 
     : 
    } 
    if (fp != NULL) 
    fclose(fp); 
+0

録音時間の配列を設定し、各スレッドが配列の要素に書き込むようにします(スレッド番号でインデックス付けされます)。パラレル領域に残りのアクティブなスレッドがあると、配列をファイルに書き出します。あなたが1つのファイルへの並行書込みを整理すると、書いたものがあなたが望むように注文されていないと不平を言ってしまうだけです。 –

+0

ありがとう。このアプローチは私のために働いているようだ。 – Phaniarnab

+0

あなたの質問への回答を書き留めて受け入れてみませんか? –

答えて

0

各スレッドがアレイの要素に書き込む(スレッド番号でインデックス付けされた)ために、記録時間の配列を設定する必要がありました。並列領域に残りのアクティブスレッドがあると、配列をファイルに書き出します。 @High Performance Markに感謝します。

関連する問題