並列化に関してwiki
首都大学東京 田川研究室
2013年12月11日更新
コラムへ戻る

Intro

いざというとき、並列化でコードを組めば締切に間に合うときがある。アルゴリズムの最適化が最も高速化に効力があるが、並列化は手軽に高速化できる。などなど。
近年のマルチコア化に便乗してシングルコア全盛のFortran77で並列化をしようという強引なwikiです。

準備するもの

  • CPUにかんする基礎知識。自分の使っているCPUに実行装置(コア)がいくつ入っているのかを調べてみましょう。
  • メモリに関する基礎知識。同時に同じメモリにアクセスしないなど。
  • OpenMPなる単語をググったという事実。
  • 自力で2次元の自然対流コードが組める実力

目次

並列化例

とりあえず、以下のコードを実行すればテキスト出力が4スレッド並列に実行されると思います。
visual studio なら、プロジェクトの設定 -> プロパティー -> Fortran -> 言語 -> OpenMP識別子の処理を、並列化コードを出力などへ変えておきます。
       PROGRAM  program1
       USE lib_omp
       !$OMP PARALLEL NUM_THRERADS(4)
       WRITE(6,*)  "Thread ID =" , omp_get_thread_num()
       !$OMP END PARALLEL

       END
実行されない場合、上記コードが確実に正しいとは限りませんがもう一度見直してみてください。 実は、並列化で必要なプログラムコードはこれだけです。↑にあったコードのうち、
       omp_get_thread_num()
が、現在自分が実行されているスレッド番号を取得する関数になります。0から始まるインデックスです。つまり、

     スレッド番号を使って実行すべきサブルーチンを場合分けする。

あるいはサブルーチンに渡す引数を変えれば良いのです。これでそれぞれのサブルーチンは並列に実行されます。