[論文レビュー] SPARK00: A Benchmark Package for the Compiler Evaluation of Irregular/Sparse Codes
SPARK00は、不規則かつスパースな計算カーネルにおける最適化コンパイラの評価を目的としたベンチマークスイートであり、ポインタ走査と間接参照配列に焦点を当てている。不規則なメモリアクセスパターンを、解析可能な小さなカーネルに分離して、コンパイラの効果を測定する。その結果、複雑な間接参照と散らばったメモリアクセスのため、ポインタベースのコードは配列ベースのコードに比べて最適化の恩恵を著しく受けにくいことが明らかになった。
We propose a set of benchmarks that specifically targets a major cause of performance degradation in high performance computing platforms: irregular access patterns. These benchmarks are meant to be used to asses the performance of optimizing compilers on codes with a varying degree of irregular access. The irregularity caused by the use of pointers and indirection arrays are a major challenge for optimizing compilers. Codes containing such patterns are notoriously hard to optimize but they have a huge impact on the performance of modern architectures, which are under-utilized when encountering irregular memory accesses. In this paper, a set of benchmarks is described that explicitly measures the performance of kernels containing a variety of different access patterns found in real world applications. By offering a varying degree of complexity, we provide a platform for measuring the effectiveness of transformations. The difference in complexity stems from a difference in traversal patterns, the use of multiple indirections and control flow statements. The kernels used cover a variety of different access patterns, namely pointer traversals, indirection arrays, dynamic loop bounds and run-time dependent if-conditions. The kernels are small enough to be fully understood which makes this benchmark set very suitable for the evaluation of restructuring transformations.
研究の動機と目的
- 動的メモリアクセスパターンを示す不規則でスパースなコードを対象としたコンパイラ評価プラットフォームの不足を補うため。
- ポインタの走査や間接参照配列などの特定の不規則性の特徴が、コンパイラ最適化の効果に与える影響を分離し、測定するため。
- 最適化コンパイラにおけるリファクタリング変換の詳細な分析を可能にする、軽量で解析可能なカーネルスイートを提供するため。
- 異なる最適化レベルやアーキテクチャ間でのコンパイラ動作を比較するための標準化された評価フレームワークを提供するため。
提案手法
- ベンチマークスイートは、主に2つのサブセットから構成される:ポインタ走査に基づくもの(例:SPMATVEC, JACIT)と、間接参照配列を使用するもの(例:ASM, TRMAT)。
- 各カーネルは、特定のタイプの不規則なアクセスを示すように設計されている:ポインタ走査、動的ループ境界、実行時依存のif文、複数の間接参照。
- vars.mkを介した構成可能なビルドシステムにより、コンパイラフラグ(CC, CFLAGS)を設定可能で、異なる構成間での一貫したコンパイルと計測を可能にしている。
- 結果はspark.datに収集され、各エントリにはベンチマークID、行列入力、基準時間、および各構成での測定実行時間が格納される。
- スレッド単位のシーケンシャルプラットフォームでの実行をサポートしており、並列処理の干渉を避けて変換効果を分離して評価できる。
- Intel Itanium上でGCC 4.2.2を用いたケーススタディでは、最適化レベル(-O2, -O3)をベースラインと比較し、さまざまなアクセスパターンにおけるスループット向上を測定した。
実験結果
リサーチクエスチョン
- RQ1ポインタベースの不規則なメモリアクセスを示すカーネルでは、配列ベースの間接参照と比較して、最適化コンパイラの性能はどのように異なるか?
- RQ2ループ変換や命令スケジューリングなどのコンパイラ最適化は、不規則なカーネルにおいてどの程度性能を向上させるか?
- RQ3複数の間接参照や実行時依存の制御フローといった、さまざまな不規則性の特徴は、最適化の効果にどのように影響するか?
- RQ4リンクリストのようなデータ構造における内側のループ走査の複雑さは、コンパイラ最適化にどのような性能的影響を与えるか?
- RQ5異なるコンパイラ最適化レベル(-O2 対 -O3)は、不規則なカーネルにおける実行時間にどのように影響するか?
主な発見
- SPMATVEC, JACIT, MCFといったポインタベースのベンチマークでは、配列ベースのベンチマークと比較して、コンパイラ最適化による性能向上が著しく小さかった。
- ASM, TRMATのようなクラスタリングされたストレージを持つ配列ベースのコードは、より良いデータ局所性と連続的アクセスパターンのおかげで、最適化の恩恵をより多く受けた。
- 特に長大なリンクリスト(例:bcsstk13)を走査するポインタベースのコードにおける内側の走査は、繰り返しの間接参照と散らばったメモリアクセスのため、最適化の向上を著しく制限した。
- コンパイラ設定(-O2 対 -O3)による性能差は僅かにしかなく、不規則なパターンでは高レベルの最適化が限定的であることが示された。
- MCFにおけるポインタ走査の広範な使用は、意味のある最適化を妨げ、すべての構成で最小限のスループット向上にとどまった。
- このベンチマークスイートは不規則性の影響を的確に分離できており、特定のアクセスパターンとコンパイラ最適化の結果との明確な相関関係を確立できた。
より良い研究を、今すぐ始めましょう
論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。
クレジットカード登録不要
このレビューはAIが作成し、人間の編集者が確認しました。