CPU、GPU、FPGA、およびハードウェア アクセラレータ用のコンパイラである HPVM 2.0 が公開されました

LLVM プロジェクトは、異種システムのプログラミングを簡素化し、CPU、GPU、FPGA、およびドメイン固有のハードウェア アクセラレータ用のコード生成ツールを提供することを目的としたコンパイラである HPVM 2.0 (Heterogeneous Parallel Virtual Machine) のリリースを発表しました。 プロジェクト コードは、Apache 2.0 ライセンスに基づいて配布されます。

異種並列システムのプログラミングは、並列処理を実現するために異なるモデル (CPU コア、ベクトル命令、GPU など)、異なる命令セット、異なるメモリ階層を使用するコンポーネントが同じシステム内に存在するため、複雑になります。 各システムは、これらのコンポーネントを独自に組み合わせて使用​​します。 HPVM プロジェクトの主なアイデアは、コンパイル時に並列実行プログラムの統一表現を使用することです。これは、GPU、ベクトル命令、マルチコア プロセッサ、FPGA など、並列コンピューティングをサポートするさまざまな種類のハードウェアに使用できます。さまざまな特殊なアクセラレータ チップ。

他のシステムとは異なり、HPVM はヘテロジニアス コンピューティングを組織するための XNUMX つの機能、つまりプログラミング言語とハードウェアに依存しない中間表現 (IR)、仮想命令セット アーキテクチャ (V-ISA)、およびランタイム スケジューリングを組み合わせようとしました。

  • HPVM 中間表現は、階層データ フロー グラフを使用して命令の LLVM 中間表現を拡張し、タスク、データ、およびパイプライン レベルでの並列処理をキャプチャします。 HPVM 中間表現には、ベクトル命令と共有メモリも含まれます。 中間表現を使用する主な目的は、効率的なコード生成と異種システムの最適化です。
  • 仮想命令セット アーキテクチャ (V-ISA) は、低レベルのハードウェア機能を抽象化し、基本的な並列処理モデル (データ フロー グラフ) のみを使用して、さまざまな形式の並列処理とメモリ アーキテクチャを統合します。 V-ISA を使用すると、並列コンピューティングのさまざまなタイプの機器間での移植性を実現でき、異種システムのさまざまな要素を使用するときにパフォーマンスを失わないようにすることができます。 仮想 ISA を使用して、CPU、GPU、FPGA、およびさまざまなアクセラレータを使用して実行できる汎用実行可能プログラム コードを提供することもできます。
  • 計算プロセスの柔軟なスケジューリング ポリシーは実行時に適用され、プログラムに関する情報 (グラフ構造) に基づいて、およびシステム内で使用可能なターゲット コンピューティング デバイス上で実行するための個々のプログラム ノードのコンパイルを通じて実装されます。

このプロジェクトによって開発されたコード ジェネレーターは、NVIDIA GPU (cuDNN および OpenCL)、Intel AVX ベクトル命令、FPGA、およびマルチコア x86 CPU を使用して実行するために、仮想 ISA を使用して定義されたアプリケーション ノードを変換できます。 HPVM トランスレータのパフォーマンスは、GPU およびベクトル コンピューティング デバイス用の手書きの OpenCL コードに匹敵することに注意してください。

HPVM 2.0 の主な革新:

  • Hetero-C++ 言語フロントエンドが提案されており、HPVM でコンパイルするための C/C++ でのアプリケーション コードの並列化が簡素化されます。 Hetero-C++ は、HPVM スレッド グラフにマップするデータレベルの並列処理および階層タスクの拡張機能を定義します。
  • Intel FPGA でのコード実行のサポートを提供するために、FPGA バックエンドが追加されました。 実行を組織化するには、インテル FPGA SDK for OpenCL が使用されます。
  • DSE (Design Space Exploration) フレームワークが追加されました。これには、コンパイラの最適化と、特定のハードウェア プラットフォームに合わせてアプリケーションを自動的にチューニングするためのボトルネックを特定するメカニズムが含まれています。 このフレームワークには、Intel の FPGA 用の既製のパフォーマンス モデルが含まれており、独自のプロセッサを接続して、HPVM でサポートされているデバイスを最適化することができます。 最適化は、HPVM と LLVM の両方のデータフロー グラフ レベルで適用できます。
  • LLVM コンポーネントがバージョン 13.0 に更新されました。
  • コードは、コード ベース、ライブラリ、ユーティリティをナビゲートしやすくするために再編成されました。
  • テスト インフラストラクチャが改善され、さまざまな HPVM コンポーネントに新しいテストが追加されました。

出所: オープンネット.ru

コメントを追加します