CMake ビルドスクリプトを移行
説明
CMake ビルドスクリプトを移行#
インテル® DPC++ 互換性ツールは、CUDA* 固有の CMake 構文を SYCL* バージョンに移行することにより、CMake ビルドスクリプトの移行をサポートします。移行機能は、--rule-file
オプションで指定するユーザー定義の移行ルールを適用して拡張およびカスタマイズできます。このツールには、CMake ビルドスクリプトの移行をトリガーする 2 つのコマンドライン・オプションが用意されています。
オプション |
説明 |
---|---|
|
実験的CMake ファイルを移行します。 |
|
実験的デフォルト: オフ。 |
例#
例 1: CUDA* プロジェクトの CMake ビルドスクリプトを移行します。
dpct -in-root=./ -out-root=out -migrate-build-script-only
例 2: rule_file.yaml
に定義されたユーザー定義の移行ルールを使用して、CUDA* プロジェクトの CMake ビルドスクリプトを移行します。
dpct -in-root=./ -out-root=out -migrate-build-script-only --rule-file=rule_file.yaml
例 3: ソースコードとともに CUDA* プロジェクトの CMake ビルドスクリプトも移行します。
dpct -p=./ -in-root=./ -out-root=out --migrate-build-script=CMake
注
Velocity-Bench で CMake ベースのアプリのデモ例を表示します。
CMake ビルドスクリプトの移行をカスタマイズ#
CMake ビルドスクリプトの移行をカスタマイズするには、定義済みのビルトイン移行ルールを使用するか、カスタムのユーザー定義移行ルールを記述します。
CMake ビルドスクリプトの定義済み移行ルールを使用#
このツールは、インストール・パスの extensions/cmake_rules フォルダーに事前定義された移行ルールのセットを提供しています。
これらの定義済みルールは、CMake ビルドスクリプトの移行に役立つ場合があります。
定義済みの移行ルールの使用を指定するには、–rule-file
オプションを使用します。
カスタムユーザー定義移行ルールを作成#
ユーザー定義の移行ルールを作成することで、CMake ファイルの移行をカスタマイズできます。ユーザー定義の独自の移行ルールの作成に関する詳細情報は、ユーザー定義の移行ルールの作成セクションにあります。
次の例は、ユーザー定義の CMake ビルドスクリプトの移行ルールを示しています。ルールの各フィールドの機能はコメントカラムに記載されています。この例のルールでは、CMake マクロ cuda_compile_ptx
を移行対象として、cuda_compile_ptx(obj_file kernel.cu)
を dpct_helper_compile_sycl_code (obj_file kernel.dp.cpp)
に移行しています。
注
dpct_helper_compile_sycl_code()
はツールによって提供されます。これはインストール・パスの cmake
フォルダー内の dpct.cmake
にあり、CMake スクリプトの移行中に、dpct.cmake
は移行されたプロジェクトのルートフォルダーにコピーされ、そのプロジェクトの一部として保存されます。
- Rule: rule_cuda_compile_ptx # Specify the unique name of the rule
Kind: CMakeRule # The kind of the rule
Priority: Fallback # The priority of the rule (Takeover, Default, Fallback)
CmakeSyntax: cuda_compile_ptx # The CMake syntax target to migrate
In: cuda_compile_ptx(${device} ${value}) # Specify target pattern of cuda_compile_ptx will be migrated
Out: dpct_helper_compile_sycl_code(${device} ${value}) # Specify the content of to migrate the content specified in “In” file
Subrules: # Subrules to further process the field(s) of pattern specified in “In” field
value: # Process the value file of pattern specified in “In” file
MatchMode: Full # Specify the match mode of the sub rule Full or Partial, default is Partial
In: ${arg}.cu # Replace the file name in *.cu pattern to *.cp.cpp
Out: ${arg}.dp.cpp
ユーザー定義の移行ルールの作成に関する詳細については、移行ルールを参照してください。
CMake 構文のユーザー定義移行ルールを記述するには:
移行する必要がある CMake の CUDA* 固有の構文を特定します。CMake CUDA* 固有の構文のユースケースを理解することが重要です。
CUDA* CMake 構文に対して機能的に同等な SYCL* のマッピングを見つけ出し、マッピングをテストします。SYCL* に機能的に同等のマッピングがない場合、ツールのインストール・パスの
dpct.cmake
ファイルで使用可能なヘルパー関数などを追加することを検討してください。CUDA* と SYCL* 間の CMake 構文マッピングを、パターンベースの yaml のルールに抽象化して記述します。
移行ルールが期待どおりに機能していることを確認するには、次のコマンドを実行して、lit ケースでルールの機能をテストします。そうでない場合は、手順 2 で定義した移行ルールを調整します。
dpct -in-root=./ -out-root out -rule-file=new_rule.yaml test.cmake
新しいルールを使用してプロジェクトを移行します。