• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C言語プログラムの並列化について)

C言語プログラムの並列化について

このQ&Aのポイント
  • C言語プログラムの並列化について
  • OpenMPを用いたC言語プログラムの並列化方法について説明します。
  • 現在のプログラムに比べてより効率的な並列処理と最適なクリティカルセクションの位置についても考える必要があります。

質問者が選んだベストアンサー

  • ベストアンサー
  • ki073
  • ベストアンサー率77% (491/634)
回答No.1

criticalではなく、reductionを使った方が書き換えがなくて良いと思います。 不要な変数を取り除いて、少し整理してみました。 scheduleをdynamicにしています。 気持ち程度しか速くはなっていませんが、ご参考に それとsumの部分によっては、最適化方法がいろいろありますので、気が向けば書き込んでください。 #include <stdio.h> #include <time.h> #define PARA_NUM 200 int main(void) { long parameter_num = 5; long sum_min0 = PARA_NUM*parameter_num; long sum_max0 = 0; #pragma omp parallel for schedule(dynamic) reduction(max:sum_max0) reduction(min:sum_min0) for(int kk0 = 0; kk0 < PARA_NUM-4; kk0++ ) { for(int kk1 = kk0+1; kk1 < PARA_NUM-3; kk1++ ) { for(int kk2 = kk1+1; kk2 < PARA_NUM-2; kk2++ ) { for(int kk3 = kk2+1; kk3 < PARA_NUM-1; kk3++ ) { for(int kk4 = kk3+1; kk4 < PARA_NUM; kk4++ ) { long sum = kk0+kk1+kk2+kk3+kk4; if ( sum_max0 < sum ) {sum_max0 = sum;} if ( sum_min0 > sum ) {sum_min0 = sum;} } } } } } printf("max: %d\n", sum_max0); printf("min: %d\n", sum_min0); return 0; }

toupo501
質問者

お礼

回答ありがとうございます。 reductionを使うことでここまで分かりやすくなるんですね・・。 reductionでmaxやminのようなことができるのは初めて知りました。 実行時間も446ms→350msと明らかにはやくなり、とても感動しております。 sumの部分については、また躓いたら投稿してみようと思います 本当にありがとうございました!

すると、全ての回答が全文表示されます。