Skip to main content
QUICK REVIEW

[論文レビュー] High-Performance GPU-to-CPU Transpilation and Optimization via High-Level Parallel Constructs

William S. Moses, Ivan R. Ivanov|arXiv (Cornell University)|Jul 1, 2022
Parallel Computing and Optimization Techniques被引用数 4
ひとこと要約

本論文は、MLIRにおけるハイレベルな並列構文を用いて、CUDAカーネルを自動的に高性能なCPUコードにトランスpileするコンパイラフレームワークを提示する。これにより、手動での移植作業を伴わず、CPU上で効率的な最適化と実行が可能になる。Fugaku上でトランスパイルされたCUDAカーネルを活用することで、Rodiniaベンチマークスイートにおいて手書きのOpenMPコードよりも76%の幾何平均の高速化を達成し、PyTorchのネイティブCPUバックエンドよりも2.7倍の高速化を実現した。

ABSTRACT

While parallelism remains the main source of performance, architectural implementations and programming models change with each new hardware generation, often leading to costly application re-engineering. Most tools for performance portability require manual and costly application porting to yet another programming model. We propose an alternative approach that automatically translates programs written in one programming model (CUDA), into another (CPU threads) based on Polygeist/MLIR. Our approach includes a representation of parallel constructs that allows conventional compiler transformations to apply transparently and without modification and enables parallelism-specific optimizations. We evaluate our framework by transpiling and optimizing the CUDA Rodinia benchmark suite for a multi-core CPU and achieve a 76% geomean speedup over handwritten OpenMP code. Further, we show how CUDA kernels from PyTorch can efficiently run and scale on the CPU-only Supercomputer Fugaku without user intervention. Our PyTorch compatibility layer making use of transpiled CUDA PyTorch kernels outperforms the PyTorch CPU native backend by 2.7$ imes$.

研究の動機と目的

  • HPCおよび機械学習分野におけるパフォーマンスポータビリティの課題に対処すること。具体的には、GPU最適化コードがFugakuのようなGPU非搭載のCPU専用システムに再実装される必要がある状況を想定する。
  • 既存ツールが手動での再実装を要するという制限を克服し、CUDAからCPUスレッドへの完全自動的かつハイレベルなトランスパイルを可能にすること。
  • 同期処理をメモリのセマンティクスとしてモデル化することにより、GPU風の並列構文に対しても、ループ不変コード移動や共通部分式削除といった従来のコンパイラ最適化を適用可能にすること。
  • GPU専用のハードウェアが搭載されていないCPU専用のスーパーコンピュータ(例:Fugaku)上で、PyTorchのCUDAカーネルを効率的に実行可能にするために、PyTorch互換のトランスパイルレイヤーを提供すること。

提案手法

  • フレームワークは、MLIRのネストされたモジュール構造を用いて、ブロックレベルの同期処理や共有メモリを含む、多段階のGPU並列性を表現し、ハイレベルなプログラム構造を保持する。
  • GPUのバリアをメモリセマンティクス操作としてモデル化することで、それらを黙認的なバリアとして扱うのではなく、標準的なコンパイラ最適化と統合可能にする。
  • PolygeistのC/C++フロントエンドを拡張し、CUDAコードを解析して、並列構文とデータレイアウトを保持したままMLIRを出力する。
  • メモリ動作を分析することで、GPU風の並列領域に対しても、ループ不変コード移動などの標準的なコンパイラ最適化を透明に適用する。
  • トランスパイルされたコードはOpenMP並列CPUコードにコンパイルされ、コンsumerおよびエクサスケールCPU上で効率的なマルチコア実行が可能になる。
  • PyTorch互換レイヤーにより、実行時におけるCUDAカーネルのトランスパイルが可能となり、GPU最適化モデルをGPU非搭載システム(例:Fugaku)で実行可能にする。

実験結果

リサーチクエスチョン

  • RQ1コンパイラがCUDAカーネルを、並列性を保持・最適化しつつ、高性能なCPUコードに自動的にトランスパイルできるか?
  • RQ2ハイレベルな並列構文を、変更なしに標準的なコンパイラ最適化が適用可能な形で表現できるか?
  • RQ3GPU風の同期処理(例:ブロックワイドバリア)をメモリセマンティクスとしてモデル化することで、既存の最適化と統合可能になるか?
  • RQ4トランスパイルされたCUDAコードは、CPUアーキテクチャ上で手書きのOpenMP実装を上回る性能を発揮できるか?
  • RQ5FugakuのようなGPU非搭載のスーパーコンピュータ上で、PyTorchのCUDAカーネルをGPUハードウェアなしで効率的に実行できるか?

主な発見

  • トランスパイルされたCUDAコードは、コンsumer CPU上で実行された場合、Rodiniaベンチマークスイートにおいて手書きのOpenMP実装よりも76%の幾何平均の高速化を達成した。
  • 本フレームワークにより、GPU専用のスーパーコンピュータFugaku上でも、PyTorchのCUDAカーネルを効率的に実行可能となり、ネイティブのPyTorch CPUバックエンドよりも平均2.7倍の高速化が達成された。
  • CPU上で元のカーネルスケジューリングを維持した状態で、内側のループをシリアライズすることで、スレッドの分散の低減とより良いメモリアクセスパターンが実現され、性能が向上した。
  • メモリセマンティクスに基づくバリアモデル化により、ループ不変コード移動や共通部分式削除といった標準的なコンパイラ最適化が、GPU風の並列領域に対しても直接適用可能になった。
  • 本フレームワークは、ResNet-50を含むPyTorchの複雑なカーネルを効果的にトランスパイル・最適化でき、実世界のディープラーニングワークロードとの互換性を示した。
  • 手動での再実装を伴わず、パフォーマンスポータビリティを実現でき、GPU最適化コードをCPU専用またはハイブリッドHPCシステムに適応するコストを低減した。

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

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

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

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