Linux* でのプロジェクトの移行#

コマンドラインの使用#

コマンドラインからインテル® DPC++ 互換性ツールを起動できます。

--in-root オプションを使用して、移行するソースの場所を指定します。

  • --in-root で指定したディレクトリー内のすべてのソース (任意の入れ子レベル) が移行されます。

  • --in-root で指定したディレクトリー内のヘッダーファイル (任意の入れ子レベル) のうち、移行するソースやヘッダーファイルでインクルードされているものは移行の対象となります。

  • --in-root ディレクトリーの外部にあるファイルは、プログラムのソースファイルでインクルードされていても移行されません。

  • --in-root オプションが指定しない場合、最初の入力ソースファイルのディレクトリーが使用されます。

--out-root オプションは、インテル® DPC++ 互換性ツールにより生成される SYCL* コードの保存先ディレクトリーを指定します。

  • 移行されたファイルの相対パスは維持されます。

  • 拡張子は .dp.cpp に変更されます。

  • --out-root オプションを指定しない場合、./dpct_output が使用されます。

次の手順は、インテル® DPC++ 互換性ツールを使用して Folder Options のサンプルを移行する方法を示しています。

  1. 以下のいずれかの方法で Folder Options サンプルを開きます。

    • oneapi-cli ユーティリティーを使用して、[Intel® DPC++ Compatibility Tool] カテゴリーからサンプルを選択します。

    • GitHub* (英語) からサンプルをダウンロードします。

  2. サンプル・プロジェクトのルートに移動します。

    Folder Options サンプル・プロジェクトには、2 つのフォルダー (foobar) に格納された、3 つのファイル (main.cuutil.cu、および util.h) から成る単純な CUDA* プログラムが含まれています。

    foo 
    ├── bar 
    │       ├── util.cu 
    │       └── util.h 
    └── main.cu
  3. 展開した foo フォルダーの rootフォルダーから、インテル® DPC++ 互換性ツール実行します。

    dpct --in-root=foo --out-root=result/foo foo/main.cu foo/bar/util.cu --extra-arg="-Ifoo/bar/"

    --in-root オプションでは、移行する CUDA* ファイルの場所を指定します。--out-root オプションは、移行されたファイルの出力場所を指定します。

  4. 結果として、以下のファイルが生成されます。

    result/foo 
    ├── bar 
    │       ├── util.dp.cpp 
    │       └── util.h 
    └── main.dp.cpp
  5. 移行されたソースコードを確認し、インテル® DPCT により警告が出力された場合は対処し、新しいプログラムの正当性を検証してください。

挿入された警告とコメントの詳細は、「警告の出力」を参照してください。

最も正確で詳細な警告の対処法については、サンプルの README ファイルの「Addressing Warnings in the Migrated Code (移行されたコードの警告の対処法)」を参照してください。

コマンドラインの機能については、「コマンドライン・オプションのリファレンス」を参照してください。

Make/CMake* を使用した完全なプロジェクトの移行#

プロジェクトで Make や CMake* を使用している場合、コンパイル・データベース・サポートを利用して、コンパイルオプション、設定、マクロ定義、およびインクルード・パスをインテル® DPC++ 互換性ツールに提供できます。コンパイル・データベース生成の詳細については、「コンパイル・データベースの生成」を参照してください。

インテル® DPC++ 互換性ツールは、コンパイル・データベースを解析し、入力ソースを移行する際に必要なオプションを適用します。

この例では、Rodinia needleman-wunsch サンプルを使用して、コンパイル・データベースの使い方を示します。

ステップ 1: コンパイル・データベースの作成

  1. Rodinia needleman-wunsch サンプルを入手します。

    • oneapi-cli ユーティリティーを使用して、[Intel® DPC++ Compatibility Tool] カテゴリーからサンプルを選択します。

    • GitHub* (英語) からサンプルをダウンロードします。

  2. Cmake を使用する場合: intercept-build を実行する前に、CMakeLists.txt から Makefile を設定して生成します。典型的なコマンドの例は cmake ... です。

  3. コンパイル・データベースを作成するには、プロジェクトを作成してクリーンします。そして intercept-build を実行します。

    $ make clean 
    $ intercept-build make

    これにより、作業ディレクトリーに compile_commands.json ファイルが生成されます。

    intercept-build スクリプトは、オリジナルのプログラムをビルドせずに、プロジェクトのビルドコマンドを実行します。また、コンパイラーの起動をすべて記録し、入力ファイルの名前とコンパイラー・オプションをコンパイル・データベース・ファイル (compile_commands.json) に保存します。

    以下の例は、CUDA* ヘッダーが /usr/local/cuda/include にあると仮定しています。必要に応じて、このパスを実際のパスに置き換えてください。

  4. intercept build を実行後、compile_commands.json ファイルの内容を確認します。ファイルの内容は、次のようになります。

    1[{ 
    2 "command" : "nvcc -c -o needle -I/usr/local/cuda/include -D__CUDA_ARCH__=400 " 
    3 "-D__CUDACC__=1 needle.cu", 
    4 "directory" : "/home/user/projects/DPCPP_CT/rodinia_3.1/cuda/nw", 
    5 "file" : "/home/user/projects/DPCPP_CT/rodinia_3.1/cuda/nw/needle.cu" 
    6}]

ステップ 2: 移行ツールでコンパイル・データベースを使用

デフォルトでは、インテル® DPC++ 互換性ツールは、現在のディレクトリーで compile_commands.json ファイルを検索して、このファイルにあるコンパイラー・オプションを各入力ファイルに対して使用します。

次のコマンドで、前の手順で作成したコンパイル・データベースを使用して、Rodinia needleman-wunsch サンプルの CUDA* コードを移行します。

dpct -p=compile_commands.json --in-root=. --out-root=migration

--in-root オプションでは、移行する CUDA* ファイルの root の位置を指定します。--in-root ディレクトリーにあるファイルとフォルダーのみが、移行ツールの対象となります。

--out-root オプションは、移行されたファイルの出力場所を指定します。新しいプロジェクトが移行先のディレクトリーに作成されます。

-p オプションは、コンパイル・データベースの場所を指定します。

移行コマンドを実行すると、migration 出力フォルダーに次のファイルが作成されます。

migration 
└── src 
          ├── needle.h 
          ├── needle_kernel.dp.cpp 
          └── needle.dp.cpp

ステップ 3: ソースの正当性の検証とインテル® DPC++ 互換性ツールが移行できなかったコードの修正

プリプロセッサー・ディレクティブを使用して宣言された変数を使用するソースコードの移行を確認します。移行されたソースコードを確認し、インテル® DPCT により警告が出力された場合は対処し、新しいプログラムの正当性を検証してください。

挿入された警告とコメントの詳細は、「警告の出力」を参照してください。

最も正確で詳細な警告の対処法については、サンプルの README ファイルの「Addressing Warnings in the Migrated Code (移行されたコードの警告の対処法)」を参照してください。

Eclipse* の使用#

Eclipse* プラグインは、インテル® oneAPI ベース・ツールキットのインストール時に Eclipse* インスタンスを指定すると、自動的にインストールされます。

Eclipse* からサンプルにアクセスして使用するには、次の操作を行います。

  1. Eclipse* を開きます。

  2. [Intel] メニューから [Browse Intel® oneAPI Samples] を選択して、任意のサンプルを参照します。

  3. 新しいプロジェクトを開いた状態で、[Migrate Project to DPC++] を選択します。

    移行により新しいプロジェクトが作成され、Eclipse* ウィンドウに警告が直接表示されます。

  4. ソースの正当性を検証し、インテル® DPC++ 互換性ツールが移行できなかったコードを修正します。