マリコンピュートシェーダオプト

https://community.arm.com/developer/tools-software/graphics/b/blog/posts/arm-mali-compute-architecture-fundamentals

 

だから、ミッドガルド建築の特徴は、実際に計算カーネルを最適化するために何を意味するのですか?私はお勧め:

  • コンパイラによって命令語に命令の密なパッキングを可能にするために、カーネルコードに十分な命令レベルの並列性を持ちます。(このアドレスアーキテクチャのVLIWらし。)
  • カーネルコードにベクトル演算を使用すると、コンパイラによるベクトル命令への直接的なマッピングを可能にします。(それは私の好きな話題の一つだと私は、後でベクトル化に言って、はるか必要があります。)
  • AとLS命令語間のバランスを有します。キャッシュミスなしに、2の比率:LS-単語にA-ワードの1が最適であろう。キャッシュミスで、高い比率が望ましいです。例えば、15 A-単語および7 LS-ワードからなるカーネルは、まだ可能性LS-管によって拘束されることになります。
  • 同時実行(または十分な数の使用  活性を(対応するパイプラインの深さである)命令の実行レイテンシを隠すためにコアごとのスレッドが)。アクティブなスレッドの最大数  Iは、  レジスタの数によって決定されるが、  R  カーネルコード使用する:  私は  256、IF = 0 <  R  ≤4。 私は  128 =、もし4 <  R  ≤8。 私は  、64 IF = 8 <  R  ≤例えば16、カーネルAその用途8レジスタは両方実行することによって実行することができる用途5つのレジスタとカーネルB  を超えません コアあたり128件のスレッド。それは好ましいかもしれないことが、この手段は、単純なものの数に複雑な、レジスタ重い核を分割します。(私たちの間でのコンパイラの民族のために、これはまた、ヒューリスティックの可能性が高い必要するレジスタの数は4または8に近づいていることを示唆しているとき、バックエンドではなく使用よりも、メモリに値をこぼさ余分なレジスタを決定してもよいことを意味します)

いくつかの点では、SoCの中に埋め込まれたマリのGPU用のハイパフォーマンスなコードを書くことはGPUはデスクトップマシンで見つかったよりも簡単です。

  • グローバル  と  ローカルの  OpenCLのアドレス空間は、プログラマに透過キャッシュに裏打ちされた同じ物理メモリ(システムRAM)、にマッピングされます。これは、多くの場合、バリア同期をコピーすると、関連する明示的なデータの必要性を取り除きます。
  • すべてのスレッドが個々のプログラムカウンタを持っているので、分岐発散はワープベースのアーキテクチャのためのより問題の少ないです。

おすすめ

転載: www.cnblogs.com/minggoddess/p/12625085.html