インテル® DPC++ 互換性ツール (インテル® DPCT) 2025.0.0 導入ガイド#

この資料は、インテル® デベロッパー・ゾーンの「Downloadable Documentation: Intel® oneAPI Toolkits and Components」からダウンロードした『Intel® DPC++ Compatibility Tool』 (compatibility_tool_docs_2025.0.0.zip) の「Get Started with Intel® DPC++ Compatibility Tool」 (documentation\en\compatibility_tool\get_started_guide\index.html) を iSUS で翻訳した日本語参考訳です。原文は更新される可能性があります。原文と翻訳文の内容が異なる場合は原文を優先してください。

本ドキュメントはレイアウト調整および校閲を行っておりません。誤字脱字、製品名や用語の表記、レイアウト等の不具合が含まれる可能性があることを予めご了承ください。


バージョン 2023.2 はこちら (PDF)

インテル® DPC++ 互換性ツール (インテル® DPCT) は、既存の CUDA コードから SYCL コードへの移行を支援します。CUDA 言語カーネルとライブラリー API 呼び出しを移植し、CUDA コードの 90% ~ 95% を SYCL コードに移行します。さらに、移行の完了とコードの調整に役立つインライン警告を挿入します。

インテル® DPCT は、CUDA バージョン 8.0、9.x、10.x、11.x、12.0 ~ 12.1 で実装されたプログラムの移行をサポートします。サポートされる言語とバージョンのリストは将来拡張される可能性があります。

はじめに#

  1. インテル® DPCT をインストールします。

    インテル® DPCT は、インテル® oneAPI ベース・ツールキット (英語) に含まれています。まだインテル® oneAPI ベース・ツールキットをインストールしていない場合は、「インストール・ガイド」 (英語) の手順に従ってください。

    インテル® DPCT は、スタンドアロン製品としてダウンロードすることもできます。スタンドアロン・ツールをダウンロード (英語)。

  2. CUDA ヘッダーがツールからアクセス可能であることを確認します。

    特定の CUDA ヘッダーファイル (プロジェクト固有) は、インテル® DPCT からアクセスできる必要があります。インテル® DPCT は、次のデフォルトの場所にある CUDA ヘッダーファイルを探します。

    • /usr/local/cuda/include

    • /usr/local/cuda-x.y/include、ここで x.y は次のいずれかです: 8.0、9.x、10.x、11.x、12.0-12.1。

    CUDA のインストールが NVIDIA 以外から提供されたものである場合、ヘッダーファイルは異なる場所にある可能性があります。ヘッダーファイルを検索して、ツールを実行する際に --cuda-include-path=<path/to/cuda/include> オプションで場所を指定します。

    CUDA インクルード・パスは、(移行する必要がある) ソースコードが配置されているディレクトリーと同じ、またはその子パスであってはなりません。

  3. インテル® DPCT で移行したコードで使用される DPC++ 固有の拡張をサポートするコンパイラーをインストールします。

  4. setvars スクリプト (英語) を使用して環境変数を設定します。

  5. オプション:プログラムが GPU をターゲットにしている場合は、適切な GPU ドライバーまたはプラグインをインストールして、プログラムをインテル、AMD、または NVIDIA GPU 上で実行できるようにコンパイルします。

ツールを実行#

コマンドラインからインテル® DPC++ 互換性ツールを起動できます。ツールのコマンドライン オプションを使用して移行の手順を指示します。一般的なコマンド構文を以下に示します。

dpct [options] [<source0>...<sourceN>]

c2sdpct コマンドのエイリアスであり代わりに使用できます。

言語パーサー (clang) オプションの一覧を表示するには、clang オプションとして -help を渡します。

dpct -- -help

コマンドライン・オプションの完全なリストは、「コマンドライン・オプションのリファレンス」を参照してください。

移行するファイルを指定#

移行するディレクトリーまたはファイルを指定しない場合、インテル® DPCT は現在のディレクトリーにあるソースファイルの移行を試みます。デフォルトの出力ディレクトリーは dpct_output です。出力ディレクトリーを指定するには --out-root オプションを使用します。

オプションで、移行するソースファイルのパスを指定できます。パスはコンパイル・データベースで見つけることができます。以下の例は、移行するファイルまたはディレクトリーを指定する方法を示します。

  • 単一のソースファイルを移行します。

    dpct source.cpp
  • コンパイル・データベースにあるすべてのファイルを移行します。

    dpct -p=<コンパイル・データベース・ファイルの場所へのパス >
  • コンパイル・データベースにある 1 つのファイルを移行します。

    dpct -p=<コンパイル・データベース・ファイルの場所へのパス > source.cpp
  • --in-root オプションで指定したディレクトリーのソースファイルを移行し、生成したファイルを --out-root オプションで指定したディレクトリーに配置します。

    dpct --in-root=foo --out-root=bar

警告の出力

ファイルの移行中、インテル® DPCT は、SYCL に準拠するため、または正しいコードにするため注意が必要な箇所を特定します。

そして、生成するソースファイルに警告を挿入して出力に表示します。以下に例を示します。

/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++ 互換性ツールのサンプルコードを取得して移行手順とツールの機能について理解します。

サンプルコードは以下の方法で入手できます。

各サンプルの README では、サンプルコードの以降の手順が説明されています。

サンプル・プロジェクト

説明

Vector Add (英語)

単純な CUDA プログラムを SYCL へ移行する方法を示します。このプロジェクトを使用して、インテル® DPC++ 互換性ツールを使用するため、開発環境が正しく設定されているか簡単に確認できます。

Folder Options (英語)

より複雑なプロジェクトを移行する方法とオプションの使用方法を示します。

Rodinia needleman-wunsch (英語)

Rodinia Needleman-Wunsch サンプルコードを使用して、Make/CMake プロジェクトを CUDA から SYCL へ移行する方法を示します。

oneAPI サンプルカタログ (英語) (GitHub) で oneAPI サンプルコードのリストを確認してください。これらのサンプルは、CPU、GPU、FPGA をターゲットとしたマルチ・アーキテクチャー・アプリケーションの開発、オフロード、および最適化を支援するように作成されています。

Vector Add サンプルの移行#

Vector Add サンプルは、単純な CUDA プログラムを SYCL 準拠のコードに移行する方法を示します。この単純なプログラムは、[1..N] の 2 つのベクトルを加算し、結果を表示します。このプログラムは CPU 向けです。

次の手順に従って、インテル® DPCT を使用して Vector Add サンプルを移行します。

  1. Vector Add サンプル (英語) をダウンロードします。

  2. Vector Add サンプルのルートに移動します。サンプルには、src フォルダーに 1 つの CUDA ファイル (vector_add.cu) が含まれています。

  3. 展開した foo フォルダーの root フォルダーから、インテル® DPC++ 互換性ツール実行します。

    dpct --in-root=. src/vector_add.cu

    --in-root オプションは、移行するプログラムソースのルートを指定します。--in-root ディレクトリーにあるファイルとフォルダーのみが、移行ツールの対象となります。--in-rootディレクトリー外のファイルは、--in-root ディレクトリー内のソースファイルでインクルードされていても移行されません。デフォルトでは、移行されたファイルは dpct_output という名前の新しいフォルダーに作成されます。

    移行コマンドを実行すると、出力フォルダーに新しい SYCL ソースファイルが作成されます。

    dpct_output └── src └── vector_add.dp.cpp

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

  4. 移行されたソースコードを検査し、インテル® DPCT によって生成された DPCT 警告に対処してください。

    このサンプルでは、以下の警告が生成されます。

    warning: DPCT1003:0: Migrated API does not return error code. (*, 0) is inserted. You may need to rewrite this code.

    「診断リファレンス」の「DPCT1003」を確認します。

    この警告は、SYCL がエラーコードの代わりに、例外を使ってエラーを報告する場合に出力されます。このサンプルでは、インテル® DPCT は、失敗時に終了する条件文を削除し、代わりにコードを try ブロックで囲んでいます。元のコードのエラーステータス変数は残して、常にエラーコード 0 を代入するようにソースを変更しています。

    警告の説明では、修正方法が提案されています。このサンプルでは、ステータス変数は不要であるため、手動で削除してください。

  5. 移行されたコードをコンパイルします。

    icpx -fsycl -I<install_dir>/include src/vector_add.dp.cpp

    ここで、<install_dir > はインテル® DPCT のインストール・ディレクトリーです。

  6. 移行されたプログラムを実行します。

    Vector Add サンプルは CPU 向けです。ONEAPI_DEVICE_SELECTOR 環境変数 (英語)を使用して、CPU をターゲットにしてください。

    ONEAPI_DEVICE_SELECTOR=*:cpu
    ./vector_add

    2 つのベクトルを加算した結果を示す偶数のブロックが出力されるはずです: [1..N] + [1..N]

移行ワークフローの詳細については、移行ワークフロー・ガイドラインを参照してください。

さらに詳しく#

内容

説明

インテル® DPC++ 互換性ツール・デベロッパー・ガイドおよびリファレンス

インテル® DPCT の機能、ワークフロー、使用法について詳しく説明しています。

オンデマンド・ウェビナー: 既存の CUDA コードから DPC++ コードへの移行 (英語)

カーネルと API 呼び出しの両方を移行するワンタイム移行エンジンである、インテル® DPC++ 互換性ツールを使用して CUDA コードをデータ並列 C++ (DPC++) に移行する方法。

インテル® oneAPI ツールキットのインストール・ガイド (英語)

さまざまなインストーラー・モードとパッケージ・マネージャーを使用してインテル® oneAPI パッケージの入手とインストールの詳細な手順。

SYCL 仕様バージョン 1.2.1 PDF (英語)

SYCL 仕様の PDF です。SYCL が OpenCL デバイスを最新の C++ と統合する方法について説明します。

SYCL 2020 仕様 (英語)

SYCL 2020 仕様の PDF です。

Khronos SYCL の概要 (英語)

Khronos Group が提供する SYCL の概要です。

clang による CUDA のコンパイル (英語)

clang の CUDA サポートについての説明です。

インテルの LLVM SYCL 拡張 (英語)

SYCL 仕様に対する拡張の提案です。

Yocto Project 向けのレイヤー (英語)

meta-intel レイヤーを使用して Yocto Project のビルドに oneAPI コンポーネントを追加できます。

* SYCL は Khronos Group, Inc. の登録商標です。