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 のサンプルを移行する方法を示しています。
以下のいずれかの方法で Folder Options サンプルを開きます。
oneapi-cli ユーティリティーを使用して、[Intel® DPC++ Compatibility Tool] カテゴリーからサンプルを選択します。
GitHub* (英語) からサンプルをダウンロードします。
サンプル・プロジェクトのルートに移動します。
Folder Options サンプル・プロジェクトには、2 つのフォルダー (
foo
とbar
) に格納された、3 つのファイル (main.cu
、util.cu
、およびutil.h
) から成る単純な CUDA* プログラムが含まれています。foo ├── bar │ ├── util.cu │ └── util.h └── main.cu
展開した 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
オプションは、移行されたファイルの出力場所を指定します。結果として、以下のファイルが生成されます。
result/foo ├── bar │ ├── util.dp.cpp │ └── util.h └── main.dp.cpp
移行されたソースコードを確認し、インテル® DPCT により警告が出力された場合は対処し、新しいプログラムの正当性を検証してください。
挿入された警告とコメントの詳細は、「警告の出力」を参照してください。
最も正確で詳細な警告の対処法については、サンプルの README ファイルの「Addressing Warnings in the Migrated Code (移行されたコードの警告の対処法)」を参照してください。
コマンドラインの機能については、「コマンドライン・オプションのリファレンス」を参照してください。
Make/CMake* を使用した完全なプロジェクトの移行#
プロジェクトで Make や CMake* を使用している場合、コンパイル・データベース・サポートを利用して、コンパイルオプション、設定、マクロ定義、およびインクルード・パスをインテル® DPC++ 互換性ツールに提供できます。コンパイル・データベース生成の詳細については、「コンパイル・データベースの生成」を参照してください。
インテル® DPC++ 互換性ツールは、コンパイル・データベースを解析し、入力ソースを移行する際に必要なオプションを適用します。
この例では、Rodinia needleman-wunsch サンプルを使用して、コンパイル・データベースの使い方を示します。
ステップ 1: コンパイル・データベースの作成
Rodinia needleman-wunsch サンプルを入手します。
oneapi-cli ユーティリティーを使用して、[Intel® DPC++ Compatibility Tool] カテゴリーからサンプルを選択します。
GitHub* (英語) からサンプルをダウンロードします。
Cmake を使用する場合:
intercept-build
を実行する前に、CMakeLists.txt
から Makefile を設定して生成します。典型的なコマンドの例はcmake ...
です。コンパイル・データベースを作成するには、プロジェクトを作成してクリーンします。そして
intercept-build
を実行します。$ make clean $ intercept-build make
これにより、作業ディレクトリーに
compile_commands.json
ファイルが生成されます。intercept-build
スクリプトは、オリジナルのプログラムをビルドせずに、プロジェクトのビルドコマンドを実行します。また、コンパイラーの起動をすべて記録し、入力ファイルの名前とコンパイラー・オプションをコンパイル・データベース・ファイル (compile_commands.json
) に保存します。注
以下の例は、CUDA* ヘッダーが
/usr/local/cuda/include
にあると仮定しています。必要に応じて、このパスを実際のパスに置き換えてください。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* からサンプルにアクセスして使用するには、次の操作を行います。
Eclipse* を開きます。
[Intel] メニューから [Browse Intel® oneAPI Samples] を選択して、任意のサンプルを参照します。
新しいプロジェクトを開いた状態で、[Migrate Project to DPC++] を選択します。
移行により新しいプロジェクトが作成され、Eclipse* ウィンドウに警告が直接表示されます。
ソースの正当性を検証し、インテル® DPC++ 互換性ツールが移行できなかったコードを修正します。