シングルコア向けに書かれたソフトウェアを自動的にマルチコア向けにコンパイルするツールが自動並列化コンパイラです。
前回の動画で紹介したMBP (Model Based Parallelizer) (https://www.esol.co.jp/embedded/product/embp_overview.html )はMathworks社のSimulinkモデルを入力とする自動並列化ツールです。C/C++言語プログラムなどからの自動並列化ツールとしては、Intel社のコンパイラ (https://www.xlsoft.com/jp/products/intel/oneapi/index.html)や早稲田大学笠原研究室のOSCAR (https://www.kasahara.cs.waseda.ac.jp/index.html.ja)などが知られています。
自動並列化は以下の手順を全自動で実行します。手順については第12回「マルチコアで動作するソフトウェアとは」も参考にしてください。
①
ソフトウェアの分割
下図の①のようにソフトウェアを分割します。図において、カッコ内の数字は分割したソフトウェアの実行時間で、並列化の際に負荷分散を考慮するときに使います。
②
依存関係の抽出
下図の②のように分割したソフトウェアの依存関係(データの読み書き順序などの理由で生じる処理の実行順序関係)を抽出します。
③
並列化コードを生成
分割したソフトウェアを、実行環境で並列に動かすことができるソフトウェア部品(タスクやスレッド)としてコードを生成し、必要に応じて部品(タスク、スレッド)間通信等を挿入してプログラムを生成します。下図の③は実行例で、塗りつぶした長方形が部品間通信です。
自動並列化の課題は以下のような項目になります。詳しくは次回以降に紹介していきますが、完全に解決することは困難であり、そのため前回の動画でも現状では万能ではないとお伝えしている通りです。
・明確ではない依存関係
・実行時間の変動
・オーバーヘッドの変動
その中で、依存関係の問題はプログラムの書き方によって減らせる可能性があります。この点については次回説明します。
コメントをお書きください