マルチコアの基本

マルチコアの基本 · 2024/10/17
掲題についてchatGPTを用いて作成した例を紹介します。なお例において、関数呼出の箇所で関数をインライン展開することにより依存の有無が判定できる場合もありますが、ここではコンパイラはそこまでのことをしないことを前提としています。また、文中に「静的」という言葉がでてきますが、コンパイラのようにプログラムを動作させることなく解析することを静的解析といいます。

マルチコアの基本 · 2024/10/17
コンパイラはプログラムを動作させることなく解析するため、実行時にならないとわからない情報の解析には限界があります。その代表例がC言語のポインタです。ポインタの値はOS等が割り当てるメモリ番地であるため、実行時にならないとわかりません。以下で詳しく説明しますが、ポインタを利用(特に演算)すると、処理の依存関係(データの読み書き順序などの理由で生じる処理の実行順序関係)の解析が難しくなり、2つの処理A、Bの依存関係が不明という状況が生じます。

マルチコアの基本 · 2024/10/17
シングルコア向けに書かれたソフトウェアを自動的にマルチコア向けにコンパイルするツールが自動並列化コンパイラです。 前回の動画で紹介したMBP (Model Based Parallelizer) (https://www.esol.co.jp/embedded/product/embp_overview.html )はMathworks社のSimulinkモデルを入力とする自動並列化ツールです。C/C++言語プログラムなどからの自動並列化ツールとしては、Intel社のコンパイラ...

マルチコアの基本 · 2024/10/17
前回、シングルコアで動かしていたマルチタスクアプリケーションを、そのままマルチコア上に移植しても性能が向上しないだけでなく、正しく動かない場合もあるという話をしました。それではマルチコア上で正しく動作し、性能も向上するアプリケーションに自動的に変換するツールはあるのでしょうか。 第7弾の動画をご参照下さい。

マルチコアの基本 · 2024/07/22
マルチコアに対してよく聞かれる質問です。第12回で書いたように、マルチタスクで記載されたプログラムはマルチコアでそのまま動作する可能性はありますが、そうでないプログラムはそのままでは一つのコアでしか動かないため、自動もしくは手動での並列化が必要です。...

マルチコアの基本 · 2024/07/22
前回、マルチコア向けソフトウェアについて説明しましたが、資産性・再利用性を確保するための”王道”とは何でしょうか。 なお、すべての動画はEMCのYouTube動画ページからご覧いただけます。

マルチコアの基本 · 2024/07/22
今回はマルチコアで動作するソフトウェアについて説明します。 マルチコアといっても、GPUなどを使うヘテロジニアス・マルチコアについては概念が異なってくるので別の機会に譲り、今回はCPUマルチコアについてのみ考えます。...

マルチコアの基本 · 2024/07/22
前回、一つのアプリケーションの例を用いてマルチコア性能向上の概算手法について説明しました。今回はシステムになったとき難しくなる理由について説明します。...

マルチコアの基本 · 2024/07/22
前回までに、マルチコアによる性能向上に関連して依存関係やオーバーヘッドの話をしました。では結局の所、性能はどのくらい上がるのでしょうか。特にマネジメントとしては大変気になるところです。しかし、聞いても誰も答えられず、やってみないとわかりません、といったマネジャーの機嫌が悪くなる回答しか得られないことがほとんどです。この問題について2回に分けて考えてみたいと思います。 今回は、まず一つのアプリケーションでの並列性能向上を概算する方法について説明し、次回、システムになったときに性能見積が困難になる要因について考えてみます。 下の図のようなソースコード構成を持つアプリケーションを考えます。ソースコードは図のようにAからEまでの部分に分かれ、Aから開始し、それぞれ最大一回ずつ実行されるとします。括弧内は実行時間です。依存関係については以下のようになっているとします。 ・ データ依存関係:Aで生成されたデータをBとCが使い、BとCでそれぞれ生成されたデータをEで使う ・ 制御依存関係:Cの結果によりD-1またはD-2のどちらかが実行される これらの依存関係をグラフとして表現すると下図右のようになります。実線はデータ依存関係、破線は制御依存関係で、矢印の始点側の処理が終わらないと終点側の処理を開始できない、という関係を表現しています。

マルチコアの基本 · 2024/06/20
マルチコアでは、スーパーリニアといって、コア数を超える性能向上が得られる場合があります。 スーパーリニアはリソースが増えたことにより起こります。例えば、シングルコアの時と比べて2コアではキャッシュが2倍になりますが、それが良い影響を及ぼすことがあります。...

さらに表示する