Skip to main content
QUICK REVIEW

[論文レビュー] Dynamic Loop Parallelisation

Adrian Jackson, Orestis Agathokleous|arXiv (Cornell University)|May 10, 2012
Parallel Computing and Optimization Techniques参考文献 6被引用数 4
ひとこと要約

この論文では、ソース・ツー・ソースコンパイラとOpenMPに類似したディレクティブベースのアノテーションを用いて、ネストされたループ領域内のどのループを並列化するかを実行時に行う動的ループ並列化システムを提案する。このアプローチは、静的OpenMPのif節手法を上回り、特に非完璧なネスト構造や動的に変化するループのシナリオにおいて、プロファイルによる自動チューニングを可能にし、大規模な共有メモリシステムで性能向上が確認された。

ABSTRACT

Regions of nested loops are a common feature of High Performance Computing (HPC) codes. In shared memory programming models, such as OpenMP, these structure are the most common source of parallelism. Parallelising these structures requires the programmers to make a static decision on how parallelism should be applied. However, depending on the parameters of the problem and the nature of the code, static decisions on which loop to parallelise may not be optimial, especially as they do not enable the exploitation of any runtime characteristics of the execution including changes to the iterations of the loops to be parallelised. We have developed a system that allows a code to make a dynamic choice, at runtime, of what parallelism is applied to nested loops. Our method for providing dynamic decisions on which loop to parallelise significantly outperforms the standard methods for acheiving this through OpenMP (using if clauses).

研究の動機と目的

  • 静的ループ並列化の制限に対処する。OpenMPでは、実行時に最適でない可能性がある、1つの固定された並列化対象ループの選択が行われる。
  • HPCアプリケーションにおける変動するワークロードや非完璧なネスト構造のループによって引き起こされる性能劣化を克服する。
  • 手動でのコード変更を必要とせず、実行時に最適なループを自動的に動的選択する仕組みを実現する。
  • 実行時の特性に基づいて並列化戦略を適応させる事で、大規模な共有メモリシステム(100〜1000コア)におけるスケーラビリティを向上させる。
  • ソース・ツー・ソースコンパイルと軽量なランタイムライブラリを用いて、実装が簡単でユーザーに透明なシステムを開発する。

提案手法

  • ネストされたループ領域内の複数のループバージョンを自動的に生成するソース・ツー・ソースコンパイラを用い、それぞれのバージョンに並列化対象を示すディレクティブをアノテートする。
  • プログラマーが各ループレベルに対して、複数の並列化戦略を指定できる、ディレクティブベースのインターフェース(OpenMPに類似)を導入する。
  • 実行時、パフォーマンスヒューリスティクスとプロファイルデータを評価して、どのループバージョンを並列実行するかを決定するランタイムライブラリを実装する。
  • 内部のループカウンティングを回避することでオーバーヘッドを低減するため、ループの反復回数と実行時間を記録するだけの緩いプロファイルメカニズムを採用する。
  • コードの複製をパフォーマンス最適化として活用し、実行時における分岐コストを回避しながら、異なる並列化選択肢に対して別々の実行パスを提供する。
  • ヒューリスティクスに基づく選択とプロファイルに基づく意思決定の間で選択する意思決定関数を統合し、ヒューリスティクスが失敗した場合にのみプロファイルを起動する。

実験結果

リサーチクエスチョン

  • RQ1変動的または不規則なワークロード下において、実行時における動的ループ並列化が、静的OpenMPのif節手法を上回るのか?
  • RQ2プロファイルのオーバーヘッドは動的ループ選択のパフォーマンスにどのように影響するか?また、意思決定の正確性を損なわずにこれを低減できるか?
  • RQ3非完璧なネスト構造のループ領域において、静的選択が不適切となる状況で、動的ループ選択がどれほどパフォーマンスを向上できるか?
  • RQ4ソフトウェア工学ではコードスメールと見なされることがあるが、複数のループバージョンの自動コード複製は、この文脈で有益であると証明されたか?
  • RQ5軽量でディレクティブベースのシステムは、最小限のプログラマー作業と大規模なコード再構築なしに、効果的なループ並列化の自動チューニングを達成できるか?

主な発見

  • 動的ループ並列化システムは、特に変動的または不規則なワークロード下において、標準的なOpenMPのif節手法を顕著に上回った。
  • 緩いプロファイルメカニズムにより、内部のループカウンティングを排除することでオーバーヘッドが低減され、意思決定が高速化され、特にスレッド数が多い場合にパフォーマンスが向上した。
  • 静的if節手法が失敗した状況(例:CFDベンチマークにおける12および16スレッド)でも、動的システムは最適なループを正しく選択した。
  • プロファイルのオーバーヘッドが存在しても、動的アプローチはヒューリスティクスのみの決定と同等のパフォーマンスを達成しており、実用的な妥当性を示した。
  • コード複製は通常は推奨されないが、この文脈ではネストされた並列領域のオーバーヘッドを排除し、効率的な実行時選択を可能にするという点で有益であった。
  • 本システムは大規模な共有メモリシステムにおいてスケーラビリティと適応性を示し、今後の100〜1000コア規模のHPCワークロードに強く期待できる。

より良い研究を、今すぐ始めましょう

論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。

クレジットカード登録不要

このレビューはAIが作成し、人間の編集者が確認しました。