Skip to main content
QUICK REVIEW

[論文レビュー] Design and Implementation of ShenWei Universal C/C++

Huanqi Cao, Jiajie Chen|arXiv (Cornell University)|Aug 1, 2022
Embedded Systems Design Techniques被引用数 4
ひとこと要約

ShenWei Universal C/C++ (SWUC) は、ShenWei 多コアプロセッサ内の Management Processing Elements (MPEs) と Compute Processing Elements (CPEs) 間でプログラミングを統一する C/C++ の言語拡張である。host, slave, infer, kernel といった新しい属性とコンパイラディレクティブを導入することで、単一ファイルで実装可能なポータブルコードを可能にし、非均質なプログラミングを簡素化するとともに、既存の C++ アプリケーションの移行を加速する。

ABSTRACT

The ShenWei many-core series processors powering multiple cutting-edge supercomputers are equipped with their unique on-chip heterogeneous architecture. They have long required programmers to write separate codes for the control part on Management Processing Element (MPE) and accelerated part on Compute Processing Element (CPE), which is similar to open standards like OpenCL. Such a programming model results in shattered code and bad maintainability, and also make it hard to migrate existing projects targeting commodity processors. Borrowing the experience from CUDA and DPC++ and leveraging the unique unified main memory on ShenWei many-core architecture, we propose ShenWei Universal C/C++ (SWUC), a language extension to C/C++ that enables fluent programming acrossing the boundary of MPE and CPE. Through the use of several new attributes and compiler directives, users are able to write codes running on MPE and CPE in a single file. In case of C++, SWUC further support lambda expressions on CPEs, making it possible to have the code flow better matching the logical design. SWUC also manages to make the Athread library interfaces available, easing the learning curve for original ShenWei users. These powerful features together ensures SWUC to simplify the programming on ShenWei many-core processors and migration of existing C/C++ applications.

研究の動機と目的

  • ShenWei 多コアシステムにおける開発モデルの断片化に取り組む。MPE と CPE のコードは別々のファイルに記述・保守される必要がある。
  • 特にテンプレートやメンバ関数を含む既存の C/C++ アプリケーションを ShenWei プロセッサに移行する際の複雑さを低減する。
  • 1 つのファイルでホストとデバイス実行をサポートする単一ソースプログラミングモデルを提供することで、プログラマーの生産性を向上させる。
  • 知的な推論と属性ベースのコードフィルタリングを通じて、MPE と CPE の境界を越えたテンプレート使用を簡素化する。
  • 既存の C++ コンパイラのドロップインリプレースメントとして、最小限の工学的負荷で実装可能であり、既存のコンパイラインfra を活用する。

提案手法

  • host(MPE で実行)、slave(CPE で実行)、infer(呼び出し関数に基づき自動的にターゲットを決定)、kernel(CPE カーネル起動のエントリポイントを示す)の 4 つの新しい言語属性を導入する。
  • コードブロックのデフォルトターゲットアーキテクチャを設定するためのコンパイラディレクティブ #pragma swuc push と #pragma swuc pop を使用する。これにより、属性の適用を明示的に制御できる。
  • SWUC を Sunway C/C++ コンパイラのプラグインとして実装し、コード生成の前段階でターゲットアーキテクチャに基づいてコードを分析・フィルタリングする中間エンドで動作させる。
  • 2 パassコンパイルモデルを採用する:1 つは MPE 用(制御コードとカーネル起動ラッパーの生成)、もう 1 つは CPE 用(カーネル起動コードとデバイスコードの生成)、その後出力をリンクする。
  • slave 属性を備えた C++ ラムダ式をネイティブにサポートすることで、デバイス側での実行を可能にし、コードのモジュール性と論理的フローを向上させる。
  • 関数呼び出しグラフを介してターゲットアーキテクチャを伝搬する infer 属性を用いることで、MPE と CPE 間でのテンプレートインスタンス化を自動化し、手動でのテンプレート特化を回避する。

実験結果

リサーチクエスチョン

  • RQ1下位のハードウェア抽象化を変更せずに、ShenWei 多コアプロセッサ上で非均質なプログラミングを簡素化する統一 C++ プログラミングモデルをどのように設計できるか?
  • RQ2MPE と CPE 間でシームレスにテンプレートや関数ポインタを使用できるメカニズムは何か?同時に型安全性とパフォーマンスを維持できるか?
  • RQ3コンパイラプラグインアプローチは、既存のツールチェーンへの最小限の変更で MPE と CPE のコード生成を効果的に統合できるか?
  • RQ4ラムダ式と関数テンプレートを MPE-CPE バインディングを越えてどのようにサポートできるか?これにより、コードの重複を減らし、保守性を向上できるか?
  • RQ5SWUC モデルは、既存の C++ アプリケーションを ShenWei アーキテクチャに移行する際の作業負荷をどの程度低減できるか?

主な発見

  • SWUC を用いることで、host, slave, kernel といった属性を用いて 1 つのソースファイルに MPE と CPE のコードを記述可能となり、コードの断片化が顕著に低減される。
  • infer 属性により、呼び出しグラフの分析に基づき関数の可用性を自動的に特定できるため、手動でのアノテーションや重複の削減が可能になる。
  • slave 属性を備えた C++ ラムダ式はネイティブにサポートされており、論理的なプログラム構造に適合した洗練された、よりモジュラーなコードを実現できる。
  • infer 属性を用いることで、テンプレート関数が MPE と CPE の両方のターゲットに対して自動的にインスタンス化され、デバイス間での手動テンプレート特化の必要がなくなる。
  • 中間エンドでのインターセプトを伴う 2 パスコンパイルモデルにより、現在のターゲットに該当しないコードの正しいフィルタリングが保証され、正しさとパフォーマンスが維持される。
  • SWUC は既存の Sunway コンパイラにプラグインとして実装されており、最小限の統合作業でドロップインリプレースメントとして利用可能であり、標準 C++ との完全な後方互換性を確保している。

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

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

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

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