段階的な移行#

インテル® DPC++ 互換性ツールは、複数の移行結果を単一の移行済みプロジェクトに自動的にマージする段階的な移行を可能にします。

段階的な移行を行うと、CUDA* プロジェクトを段階的に移行できます。

  • 例えば、一度に 10 個のファイルを移行できます。

  • 新しい CUDA* ファイルを移行済みのプロジェクトに移行できます。

  • 複数のコードパスを移行できます。

段階的な移行はデフォルトで有効になっています。--no-incremental-migration オプションで段階的な移行を無効にできます。

例 1: 条件付きコンパイルコードを含むファイルを移行#

この例では、条件付きコンパイルコードを含む sample1.cu ファイルの段階的な移行を行います。sample1.cu の内容:

1 #ifndef MACRO_A 
2 ... コードパス 1 ...3 #elif MACRO_A == 1 
4 ... コードパス 2 ...5 #else 
6 ... コードパス 3 ...7 #endif

次の手順で、sample1.cu を段階的に移行します。

  1. コードパス 1 が移行されたコードを含む sample1.dp.cpp を生成します。ファイルと同じ作業ディレクトリーで以下を実行します。

    dpct sample1.cu --out-root=out
  2. コードパス 1 とコードパス 2 が移行されたコードを含む sample1.dp.cpp を生成します。

    dpct sample1.cu --out-root=out --extra-arg="-DMACRO_A=1"
  3. コードパス 1、コードパス 2 およびコードパス 3 が移行されたコードを含む sample1.dp.cpp を生成します。

    dpct sample1.cu --out-root=out --extra-arg="-DMACRO_A=2"

移行された結果には、それぞれのコードパスが移行されたコードが含まれます。

例 2: 複数のソースファイルで使用されるヘッダーファイルを移行#

この例は、それぞれ異なるマクロ定義を持つ複数のソースファイルに含まれるヘッダーファイルに対する段階的な移行の使い方を示しています。

ヘッダーファイル sample_inc.h の内容:

1 #ifdef MACRO_A 
2 ... コードパス 1...3 #else 
4 ... コードパス 2...5 #endif

ソースファイル sample2.cu の内容:

1 #define MACRO_A 
2 #include "sample_inc.h" 
3 #undef MACRO_A

ソースファイル sample3.cu の内容:

#include "sample_inc.h"

ファイルを段階的に移行するには次の手順を実行します。

  1. コードパス 1 が移行されたコードを含む sample2.dp.cppsample_inc.h を生成します。

    ファイルと同じ作業ディレクトリーで以下を実行します。

    dpct sample2.cu --out-root=out
  2. コードパス 1 とコードパス 2 が移行されたコードを含む sample3.dp.cppsample_inc.h を生成します。

    dpct sample3.cu --out-root=out

移行された結果には、それぞれのコードパスが移行されたコードが含まれます。

制限事項#

次の状況では段階的な移行は有効になりません。

  1. インテル® DPC++ 互換性ツールに --no-incremental-migration オプションが指定された場合。

  2. インテル® DPC++ 互換性ツールの異なるバージョンが複数の移行に使用された場合。

  3. インテル® DPC++ 互換性ツールの異なるオプションが複数の移行に使用された場合。インテル® DPC++ 互換性ツールは、すでに移行されているプロジェクトで異なるオプションが使用されたことを検出した場合、移行を停止して終了します。

次のオプションは、インテル® DPC++ 互換性ツールに、異なる移行コードを生成するように指示しているため、段階的な移行は中断される可能性があります。段階的な移行を続行するには、移行の呼び出し全体でオプションに同じ値を使用します。

  • --always-use-async-handler

  • --assume-nd-range-dim

  • --comments

  • --custom-helper-name

  • --enable-ctad

  • --keep-original-code

  • --no-cl-namespace-inline

  • --no-dpcpp-extensions

  • --no-dry-pattern

  • --optimize-migration

  • -p

  • --process-all

  • --sycl-named-lambda

  • --use-experimental-features

  • --use-explicit-namespace

  • --usm-level

  • --vcxprojfile