この記事は、インテル® デベロッパー・ゾーンに公開されている「Get Started with the Intel® DPC++ Compatibility Tool」の日本語参考訳です。
2020 年 12 月 4 日
インテル® DPC++ 互換性ツールは、CUDA* で記述されたプログラムから、最新の C++ ベースで SYCL* などの移植性に優れた業界標準規格を組込んだ、データ並列 C++ (DPC++) で記述されたプログラムへの移行を支援します。
このツールの詳細は、『インテル® DPC++ 互換性ツール・デベロッパー・ガイドおよびリファレンス』 (英語) を参照してください。既知の問題と最新情報は、リリースノート (英語) を参照してください。
注: インテル® DPC++ 互換性ツールを使用しただけでは、プロジェクトの移行は完了しません。移行を完了するには、インテル® DPC++ 互換性ツールの出力で示される追加の作業が必要です。
はじめに
インテル® DPC++ 互換性ツールはインテル® oneAPI ベース・ツールキットに含まれています。インテル® oneAPI ベース・ツールキットをインストールしていない場合は、インストール・ガイド (英語) の手順に従ってインストールしてください。
インテル® DPC++ 互換性ツールから特定の CUDA* ヘッダーファイル (プロジェクト固有) にアクセスできる必要があります。インテル® DPC++ 互換性ツールは、デフォルトで次の場所を参照します。
- /usr/local/cuda/include
- /usr/local/cuda-x.y/include。x.y は、8.0、9.0、9.1、9.2、10.0、10.1、10.2、11.0、または 11.1 のいずれか。
カスタムの場所を参照する場合は、インテル® DPC++ 互換性ツールのコマンドラインで –cuda-include-path=<path/to/cuda/include> オプションを使用して場所を指定します。
注: 移行対象のソースコードが配置されているディレクトリーまたはそのサブディレクトリーを CUDA* のインクルード・パスに指定しないでください。
現在 (2021.1 リリースでは)、インテル® DPC++ 互換性ツールは CUDA* バージョン 8.0、9.0、9.1、9.2、10.0、10.1、10.2、11.0、または 11.1 で実装されたプログラムの移行をサポートしています。サポートしている言語とバージョンのリストは、将来拡張される予定です。
インテル® DPC++ 互換性ツールの環境をセットアップするには、次のコマンドを実行します。
- Linux* (sudo): source /opt/intel/inteloneapi/setvars.sh
- Linux* (user): source ~/intel/inteloneapi/setvars.sh
- Windows*: Drive:\Program Files(x86)\Intel\oneAPI\setvars.bat
オペレーティング・システムのシェルからの一般的な呼び出し構文は次のとおりです。
dpct [options] [<source0>... <sourceN>]
ビルトイン使用情報
インテル® DPC++ 互換性ツール固有のオプションのリストを表示するには、–help オプションを使用します。
dpct --help
言語パーサー (clang) のオプションのリストを表示するには、clang のオプションとして -help を渡します。
dpct -- -help
警告の表示
インテル® DPC++ 互換性ツールは、コードを DPC++ 準拠にするために、ファイルの移行中に注意が必要なコード内の場所を示します。生成されたソースファイルにコメントが挿入され、出力で警告として表示されます。特定の警告の意味の詳細は、診断リファレンス (英語) を参照してください。次に例を示します。
/path/to/file.hpp:26:1: warning: DPCT1003:0: Migrated API does not return error code. (*,0) is inserted. You may need to rewrite this code.
// source code line for which warning was generated
^
単純なテスト・プロジェクトの移行
インテル® DPC++ 互換性ツールには、ツールとその機能を理解できるように、いくつかのサンプルが用意されています。サンプルの概要を次の表に示します。
次のいずれかの方法でサンプルにアクセスした後、サンプル・プロジェクトのルートに移動します。
- oneapi-cli ユーティリティーを使用して、インテル® DPC++ 互換性ツールのカテゴリーからサンプルを選択します。
- GitHub* からダウンロード: https://github.com/oneapi-src/oneAPI-samples/tree/master/Tools/Migration (英語)
サンプルのダウンロードおよびアクセス方法の詳細は、インテル® oneAPI ベース・ツールキット入門ガイドを参照してください。
- インテル® oneAPI ベース・ツールキット導入ガイド (Windows* 版)
- インテル® oneAPI ベース・ツールキット導入ガイド (Linux* 版)
- インテル® oneAPI ベース・ツールキット入門 (macOS* 版) (英語)
テストサンプルの目的と使用方法の詳細は、各サンプルの README ファイルを参照してください。
テストサンプル | 説明 |
---|---|
ベクトル加算 DPCT
|
このサンプルは、単純なプログラムを CUDA* からデータ並列 C++ へ移行する方法を示します。ベクトル加算のサンプルでは、開発環境がインテル® DPC++ 互換性ツール (dpct) を使用するように正しくセットアップされていることを確認できます。 |
フォルダーオプション DPCT
|
このサンプルは、複雑なプロジェクトを移行する方法とオプションの使用例を示します。 |
Rodinia NW DPCT
|
このサンプルは、インテル® DPC++ 互換性ツールを使用して Make/CMake プロジェクトを CUDA* からデータ並列 C++ へ移行する方法を示します。 |
例
この例では、ベクトル加算サンプルを使用しています。
コマンドラインでの基本的な呼び出し
次の手順に従って、ベクトル加算サンプルを移行します。
- vector_add.cu サンプルをダウンロードします。
- サンプルのルート・ディレクトリーからインテル® DPC++ 互換性ツールを実行します。
dpct --in-root=. src/vector_add.cu
vector_add.dp.cpp ファイルが dpct_output ディレクトリーに出力されます。次のコマンドを使用してディレクトリーを移動します。
cd dpct_output
ファイルは DPC++ ソースファイルに移行されました。
- 生成されたソースコードを確認して、インテル® DPC++ 互換性ツールで移行できなかったコードを確認し修正します (この例で使用したコードは単純であるため、通常は手動で修正する必要はありません)。警告への対処についての詳細な手順は、https://github.com/oneapi-src/oneAPI-samples/tree/master/Tools/Migration (英語) の README ファイルの「Addressing Warnings in the Migrated Code (移行したコードの警告への対処)」セクションを参照してください。
注: 移行されたサンプルをコンパイルするには、-I<dpct_root_folder>/include を追加する必要があります。詳細は、『インテル® DPC++ 互換性ツール・デベロッパー・ガイドおよびリファレンス』の「Migrate a Project (プロジェクトの移行)」 (英語) セクションを参照してください。
関連情報
内容 | 説明およびリンク (英語) |
---|---|
インテル® DPC++ 互換性ツール・デベロッパー・ガイドおよびリファレンス | https://software.intel.com/content/www/us/en/develop/documentation/intel-dpcpp-compatibility-tool-user-guide/top.html |
オンデマンド・ウェビナー: 既存の CUDA* コードから DPC++ コードへの移行 | https://software.seek.intel.com/CUDA-to-DPC-Webinar |
インテル® oneAPI ツールキットのインストール・ガイド | https://software.intel.com/content/www/us/en/develop/articles/installation-guide-for-intel-oneapi-toolkits.html |
SYCL* 仕様バージョン 1.2.1 PDF | https://www.khronos.org/registry/SYCL/specs/sycl-1.2.1.pdf |
Khronos SYCL* の概要 | SYCL* の概要: https://www.khronos.org/sycl/ |
Clang の CUDA* サポート | https://llvm.org/docs/CompileCudaWithLLVM.html |
SYCL* 仕様の拡張案 | https://github.com/intel/llvm/tree/sycl/sycl/doc/extensions |
法務上の注意書き
インテルのテクノロジーを使用するには、対応したハードウェア、ソフトウェア、またはサービスの有効化が必要となる場合があります。
絶対的なセキュリティーを提供できる製品またはコンポーネントはありません。
実際の費用と結果は異なる場合があります。
© Intel Corporation. Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation またはその子会社の商標です。
* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
本資料は、(明示されているか否かにかかわらず、また禁反言によるとよらずにかかわらず) いかなる知的財産権のライセンスも許諾するものではありません。
本資料で説明されている製品には、エラッタと呼ばれる設計上の不具合が含まれている可能性があり、公表されている仕様とは異なる動作をする場合があります。現在確認済みのエラッタについては、インテルまでお問い合わせください。
インテルは、明示されているか否かにかかわらず、いかなる保証もいたしません。ここにいう保証には、商品適格性、特定目的への適合性、および非侵害性の黙示の保証、ならびに履行の過程、取引の過程、または取引での使用から生じるあらゆる保証を含みますが、これらに限定されるわけではありません。
製品とパフォーマンス情報
1実際の性能は利用法、構成、その他の要因によって異なります。
詳細は、www.Intel.com/PerformanceIndex (英語) を参照してください。