OpenMP の講義を受ける予定で、OpenMP を使ったプログラムを生き生きと書きたいと思っています。OpenMP の最も重要な概念を持ち、顕著なスピードアップを実現しているプログラムを教えてください。私はすばらしいプログラムの例が欲しいです。あなたが OpenMP の専門家であることを私に教えてください。あなたは私が技術的で興味深い例を探していることを知っています。
私は 2 つのプログラムを活発に書きたいと思っています.
私の聴衆は非常にアマチュアかもしれません
OpenMP の講義を受ける予定で、OpenMP を使ったプログラムを生き生きと書きたいと思っています。OpenMP の最も重要な概念を持ち、顕著なスピードアップを実現しているプログラムを教えてください。私はすばらしいプログラムの例が欲しいです。あなたが OpenMP の専門家であることを私に教えてください。あなたは私が技術的で興味深い例を探していることを知っています。
私は 2 つのプログラムを活発に書きたいと思っています.
私の聴衆は非常にアマチュアかもしれません
個人的には、OpenMP の最も印象的な側面は、OpenMP で記述できるコードのスケーラビリティーであるとは言えません。より印象的な側面は、既存のシリアル プログラムを簡単に使用して、わずかな OpenMP ディレクティブを使用して、十分なスケーラビリティを備えた並列プログラムに変換できることです。
ですから、聴衆が興味を持っているプログラム (またはプログラムの一部)、できれば聴衆が慣れ親しんでいるプログラムを取り上げて、その場で並列化し、講義で、あなたが言うように生き生きとしたものにすることをお勧めします。講師が、たとえば、8 コアで 5 分間のコーディングと再コンパイルで 4 倍のスピードアップを見せてくれると感心します。そして、それは、8 コアで 8 倍のスピードアップを (常に簡単に) 達成できない理由について、あらゆる種類の興味深いトピックにつながります。
もちろん、すべてのステージ イリュージョニストと同様に、例を慎重に選択し、リハーサルを行って、議論をサポートするのに十分なスピードアップが得られるようにする必要があります。
個人的には、このようなデモに恥ずかしい並列プログラムを使用するのは恥ずかしいことです。聴衆のより知覚的なメンバーは、meh
.
(1)行列の乗算
おそらく、これが最も単純な例です(ただし、行列の加算の方が簡単です)。
(2)マンデルブロ
http://en.wikipedia.org/wiki/Mandelbrot_set
Mandelbrotも驚異的並列であり、OpenMPはまともなスピードアップを実現できます。グラフィックを使用して視覚化することもできます。マンデルブロも、ワークロードの不均衡があるため、興味深い例です。schedule(dynamic,1)
スケジューリングポリシー(例: vs schedule(static)
。)、およびさまざまなスレッドライブラリ(例:Cilk PlusまたはTBB)に基づいて、さまざまなスピードアップが見られる場合があります。
(3)いくつかの数学的カーネル
たとえば、FFT(非再帰バージョン)も恥ずかしいほど並列化されています。
「OmpSCR」ベンチマークを見てください:http ://sourceforge.net/projects/ompscr/このスイートには簡単なOpenMPの例があります。