アメリエフの技術ブログ

Amelieff Staff Blog

並列化可能性

こんにちは、hr-kです。 今回は計算プログラムの高速化、特にプログラムの並列化可能性に着目した話をしたいと思います。 計算を高速化する方法は大まかに3通りあります。

  1. 各CPUを上手に使う(CPU内部でのスレッド構造や型などをうまく利用)

  2. 単純にCPUの性能をよくする

  3. coreに仕事を振り分けて並列化する

1,2は深い知識、もしくはお金が必要ですが、3はOpenMPopenMPIといったソフトを利用することで お手軽に実行できます。

並列化可能性

ただし並列化には向き不向きがあり、因果関係がない事象は並列化可能ですが、因果関係のある事象は並列化できません。身近な例えで見てみましょう。

ケーキを作る時に、生地を作ること、フルーツを切ること、ホイップクリームを作ることは別々の人 が同時に実行可能(並列化可能)ですが、生地を焼くことと焼きあがった生地にホイップクリームを塗ることは同時にはできません(並列化不可能)。

並列化の向き不向き

このように、並列化による高速化には向き不向きがあります。 因果関係がある処理(例えばAが終わってからその結果を用いてBなど)の場合には効力を発揮できませんが、 因果関係がない処理(複数のリードをリファレンスにマッピングする時など)を大量にする場合にはすごく強力なツールとなってくれます。

ソースの中で並列化可能な部分の見極めには多少の慣れは必要ですが、計算は飛躍的に早くなるので、ぜひ試してみてください。