CMake ビルドスクリプトを移行#

インテル® DPC++ 互換性ツールは、CUDA* 固有の CMake 構文を SYCL* バージョンに移行することにより、CMake ビルドスクリプトの移行をサポートします。移行機能は、--rule-file オプションで指定するユーザー定義の移行ルールを適用して拡張およびカスタマイズできます。このツールには、CMake ビルドスクリプトの移行をトリガーする 2 つのコマンドライン・オプションが用意されています。

オプション

説明

--migrate-build-script=CMake

実験的CMake ファイルを移行します。

--migrate-build-script-only

実験的デフォルト: オフ。

#

例 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 構文のユーザー定義移行ルールを記述するには:

  1. 移行する必要がある CMake の CUDA* 固有の構文を特定します。CMake CUDA* 固有の構文のユースケースを理解することが重要です。

  2. CUDA* CMake 構文に対して機能的に同等な SYCL* のマッピングを見つけ出し、マッピングをテストします。SYCL* に機能的に同等のマッピングがない場合、ツールのインストール・パスの dpct.cmake ファイルで使用可能なヘルパー関数などを追加することを検討してください。

  3. CUDA* と SYCL* 間の CMake 構文マッピングを、パターンベースの yaml のルールに抽象化して記述します。

  4. 移行ルールが期待どおりに機能していることを確認するには、次のコマンドを実行して、lit ケースでルールの機能をテストします。そうでない場合は、手順 2 で定義した移行ルールを調整します。

    dpct -in-root=./ -out-root out -rule-file=new_rule.yaml test.cmake
  5. 新しいルールを使用してプロジェクトを移行します。