インテル® oneAPI DPC++/C++ コンパイラーは、C++17 を含む最新の C、C++ および DPC++ 言語標準をサポートし、インテル® 64 および IA-32 (Windows* および Linux* のみ) アーキテクチャーでアプリケーションを高速に実行するための最適化を提供します。インテル® Xeon® プロセッサーおよび互換プロセッサーで増え続けるコア数とベクトルレジスター幅を利用して、非常に高速に実行できる最適化されたコードを生成します。優れた最適化と SIMD (Single Instruction Multiple Data) ベクトル化、インテル® パフォーマンス・ライブラリーとの統合、OpenMP* 5.0/5.1 並列プログラミング・モデルにより、アプリケーション・パフォーマンスを大幅に向上します。

インテル® oneAPI DPC++/C++ コンパイラーは、さまざまな計算アクセラレーター向けの C++ ベースの SYCL* ソースファイルをコンパイルします。

インテル® oneAPI DPC++/C++ コンパイラーは、インテル® oneAPI ツールキット (英語) の一部です。

準備

Windows*

コンパイラーは、次のバージョンの Microsoft* Visual Studio* に統合されます。

Visual Studio* でデバッグおよび開発を含むすべての機能を利用するには、Visual Studio* Community Edition 以上が必要です。Visual Studio* Express Edition では、コマンドラインのビルドのみ利用できます。すべてのバージョンで Visual Studio* のインストール時に、Microsoft* C++ サポートが選択されていなければなりません。Visual Studio* 2015 以降では、このオプションを選択するには、カスタム・インストールを使用する必要があります。

通常 Windows* では、コマンドラインを使用する前に、環境変数を設定する必要はありません。インテル® コンパイラーのコマンドライン・ウィンドウは、これらの環境変数を自動的に設定します。環境変数を設定する必要がある場合は、各スイートの入門ガイドの説明に従って、環境スクリプトを実行してください。

<install_dir> はインストール・ディレクトリーを示します。デフォルトでは、C:\Program Files (x86)\IntelSWTools です。

Linux*

コンパイラーを使用する前に、すべてのツールを一度に初期化する初期化ユーティリティーを使用して、source コマンドで環境スクリプトを実行して環境変数を設定する必要があります。

  1. インストール・ディレクトリー、<install_dir> を確認します。
    1. root ユーザーまたは sudo ユーザーでデフォルトの場所にインストールした場合、コンパイラーは /opt/intel/ にインストールされます。この場合、<install_dir>/opt/intel/ です。
    2. root/sudo 以外のユーザーでインストールした場合、ユーザーの home ディレクトリー以下の intel/ が使用されます。この場合、<install_dir>$HOME/intel/ になります。
    3. クラスターやエンタープライズ・ユーザーの場合、管理チームが共有ネットワーク・ファイル・システムにコンパイラーをインストールしている可能性があります。管理者にインストールの場所 (<install_dir>) を確認してください。
  2. source コマンドで使用しているシェル向けの環境設定スクリプトを実行します。
    1. bash: source <install_dir>/bin/setvars.sh intel64
    2. csh/tcsh: source <install_dir>/bin/setvars.csh intel64
  3. デフォルトの 64 ビット・コンパイラーの代わりに 32 ビット ia32 コンパイラーを使用する場合は、上記の source コマンドの intel64ia32 に変更してください。次に例を示します。
    1. bash: source <install_dir>/bin/setvars.sh ia32
    2. csh/tcsh: source <install_dir>/bin/setvars.csh ia32

SYCL* コードのコンパイルと実行

下記の手順に従って、SYCL* コードをコンパイルして実行します。

  1. サンプル SYCL* プログラムを次に示します。以下のコードをファイル simple-sycl-app.cpp として保存します。
    #include <CL/sycl.hpp>
    
    int main() {
      // SYCL* キューを作成
      cl::sycl::queue Queue;
    
      // 4 つの整数のバッファーを作成
      cl::sycl::buffer<cl::sycl::cl_int, 1> Buffer(4);
    
      // カーネルのインデックス空間のサイズ
      cl::sycl::range<1> NumOfWorkItems{Buffer.get_count()};
    
      // コマンドグループをキューに送信
      Queue.submit([&](cl::sycl::handler &cgh) {
        // デバイス上のバッファーへの書き込み専用アクセスを取得
        auto Accessor = Buffer.get_access<cl::sycl::access::mode::write>(cgh);
        // カーネルを実行
        cgh.parallel_for<class FillBuffer>(
            NumOfWorkItems, [=](cl::sycl::id<1> WIid) {
              // インデックスでバッファーを埋める
              Accessor[WIid] = (cl::sycl::cl_int)WIid.get(0);
            });
      });
    
      // ホスト上のバッファーへの読み取り専用アクセスを取得
      const auto HostAccessor = Buffer.get_access<cl::sycl::access::mode::read>();
    
      // 結果が正しいか確認
      bool MismatchFound = false;
      for (size_t I = 0; I < Buffer.get_count(); ++I) {
        if (HostAccessor[I] != I) {
          std::cout << "The result is incorrect for element: " << I
                    << " , expected: " << I << " , got: " << HostAccessor[I]
                    << std::endl;
          MismatchFound = true;
        }
      }
    
      if (!MismatchFound) {
        std::cout << "The results are correct!" << std::endl;
      }
    
      return MismatchFound;
    }
    
  2. simple-sycl-app をビルドするには、次のコマンドを実行します。
    dpcpp simple-sycl-app.cpp -o simple-sycl-app
  3. simple-sycl-app を実行するには、次のコマンドを使用します。
    ./simple-sycl-app

    出力 (The results are correct!) が表示されます。

注: SYCL* ホストデバイスは一部のみサポートされています。

SYCL* デバイスの指定方法 (オプション)

デバイスを指定するため、SYCL* は、サブクラス化してランタイムがデバイスを選択する方法を定義できる、抽象 cl::sycl::device_selector クラスを提供します。SYCL* device_selector の operator() メソッドは抽象メンバー関数で、SYCL* デバイスへの参照を受け取り、整数スコアを返します。この抽象メンバー関数は、派生クラスに実装でき、SYCL* デバイスを選択するためのロジックを提供します。SYCL* ランタイムは、返されたスコアが最も高いデバイスを使用します。このオブジェクトは、cl::sycl::queue および cl::sycl::device コンストラクターに渡すことができます。

この例は、device_selector を使用して GPU にバインドされたデバイスとキュー・オブジェクトを作成する方法を示しています。

#include <CL/sycl.hpp>

int main() {
  class NEOGPUDeviceSelector : public cl::sycl::device_selector {
  public:
    int operator()(const cl::sycl::device &Device) const override {
      using namespace cl::sycl::info;

      const std::string DeviceName = Device.get_info<device::name>();
      const std::string DeviceVendor = Device.get_info<device::vendor>();

      return Device.is_gpu() && (DeviceName.find("HD Graphics NEO") != std::string::npos);
    }
  };

  NEOGPUDeviceSelector Selector;
  try {
    cl::sycl::queue Queue(Selector);
    cl::sycl::device Device(Selector);
  } catch (cl::sycl::invalid_parameter_error &E) {
    std::cout << E.what() << std::endl;
  }
}

注: 次のいずれかのデバイスセレクターを使用して、実行に使用する SYCL* デバイスを指定できます。
  • cl::sycl::intel::fpga_selector
  • cl::sycl::intel::fpga_emulator_selector
  • cl::sycl::cpu_selector
  • cl::sycl::gpu_selector

コマンドラインの使用 (Windows*)

次のステップに従って、Microsoft* Visual Studio* からコマンドラインを使用してコンパイラーを起動します。

コンパイラーを利用するには、Microsoft* Visual Studio* がインストールされていなければなりません。

ステップ 1: コマンドプロンプトを開く

ステップ 2: コンパイラーの起動

次のコマンドでコマンドラインからコンパイラーを起動します。

インテル® C++ コンパイラー・クラシックは、インテル® oneAPI HPC ツールキットおよびインテル® oneAPI IoT ツールキットに含まれています。次のコマンドでコマンドラインからコンパイラー・クラシックを起動します。

インテル® C++ コンパイラー・クラシックの起動に関する詳細は、「コンパイラーの起動」を参照してください。

コマンドラインの使用 (Linux*)

次のコマンドで Linux* のコマンドラインからコンパイラーを起動します。

インテル® C++ コンパイラー・クラシックは、インテル® oneAPI HPC ツールキットおよびインテル® oneAPI IoT ツールキットに含まれています。次のコマンドでコマンドラインからコンパイラー・クラシックを起動します。

インテル® C++ コンパイラー・クラシックの起動に関する詳細は、「コンパイラーの起動」を参照してください。

Microsoft* Visual Studio* の使用 (Windows*)

次のステップに従って、Microsoft* Visual Studio* からコンパイラーを起動します。

ステップ 1: バイナリーのビルド

  1. Microsoft* Visual Studio* を起動します。
  2. 既存のプロジェクトまたはソリューションを開きます。
  3. [ソリューション エクスプローラー] でプロジェクトを右クリックして [Intel Compiler] > [Use Intel oneAPI DPC++/C++ Compiler] を選択します。
  4. [OK] を選択します。
  5. [ビルド] > [ソリューションのビルド] を選択します。

ステップ 2: ビルド構成の設定

  1. [ソリューション エクスプローラー] でプロジェクトを右クリックして [プロパティ] を選択します。
  2. [C/C++] ヘッダーを展開します。
  3. 必要な設定を行います。

Microsoft* Visual Studio* C++ コンパイラーからインテル® oneAPI DPC++/C++ コンパイラーへの変換

  1. Microsoft* Visual Studio* を起動し、ソリューションまたはプロジェクトを開きます。
  2. [プロジェクト] > [Intel Compiler] > [Use Intel oneAPI DPC++/C++] を選択します。
  3. [OK] を選択します。
  4. [ビルド] > [ソリューションのビルド] を選択します。

インテル® oneAPI DPC++/C++ コンパイラーから Microsoft* Visual Studio* C++ コンパイラーへの変換

この操作を行うと、選択したソリューション・ファイルで Microsoft* Visual Studio* C++ コンパイラーが使用されます。[Do not clean project(s)] を有効にしない限り、プロジェクトのすべての構成が自動でクリーンされます。プロジェクトのクリーンを選択しない場合は、更新プロジェクトをリビルドして、すべてのソースファイルが新しいコンパイラーでコンパイルできることを確認する必要があります。

  1. Microsoft* Visual Studio* を起動し、ソリューションまたはプロジェクトを開きます。
  2. [プロジェクト] > [Intel Compiler] > [Use Visual C++] を選択します。
注: Microsoft* Visual Studio* でコンパイラーのバージョンを変更するには、[ツール] > [オプション] > [Intel Compilers and Libraries] > [C++] > [Compilers] を選択します。

Eclipse* CDT の使用 (Linux*)

次のステップに従って、Eclipse* CDT からコンパイラーを起動します。

ステップ 1: インテル® コンパイラー Eclipse* CDT プラグインをインストール

  1. Eclipse* を起動します。
  2. [Help] > [Install New Software] を選択します。
  3. [Add] をクリックして [Add Site] ダイアログを開きます。
  4. [Archive] を選択して、ディレクトリー <install_dir>/compiler/<version>/linux/ide_support を参照し、com.intel.dpcpp.compiler で始まる .zip ファイルを選択した後、[OK] を選択します。
  5. 「Intel」で始まるオプションを選択して [Next] をクリックし、インストール手順に従います。
  6. Eclipse* の再起動を求められたら、[Yes] を選択します。

ステップ 2: 新規プロジェクトの作成または既存プロジェクトを開く

  1. Eclipse* で既存プロジェクトを開くか、新規プロジェクトを作成します。
  2. プロジェクトを右クリックして [Properties] > [C/C++ Build] > [Tool chain Editor] を選択します。
  3. 右側のパネルから [Intel DPC++/C++ Compiler] を選択します。

ステップ 3: ビルド構成の設定

  1. Eclipse* で既存プロジェクトを開きます。
  2. プロジェクトを右クリックして [Properties] > [C/C++ Build] > [Settings] を選択します。
  3. 右側のパネルでビルド構成を作成または管理します。

次のステップ

関連情報

コンテンツ

説明とリンク

リリースノート (英語)

リリースノートの既知の問題と最新情報を確認します。

インテル® oneAPI プログラミング・ガイド (英語)

DPC++、さまざまなターゲット・アクセラレーター向けのプログラミング、インテル® oneAPI ライブラリーの概要を含む、インテル® oneAPI DPC++/C++ コンパイラーのプログラミング・モデルの詳細を提供します。

インテル® oneAPI DPC++/C++ コンパイラー・デベロッパー・ガイドおよびリファレンス (英語)

インテル® oneAPI DPC++/C++ コンパイラーの機能とセットアップを確認して、コンパイラーのオプション、属性、組込み関数などに関する詳細な情報を得ます。

SYCL* 仕様バージョン 1.2.1 PDF

最新の C++ を使用して SYCL* で OpenCL* デバイスを統合する方法を説明した SYCL* 仕様の PDF です。https://www.khronos.org/registry/SYCL/specs/sycl-1.2.1.pdf (英語)

SYCL* 概要サイト

SYCL* の概要を説明しています。https://www.khronos.org/sycl/ (英語)

GNU* C++ ライブラリー

デュアル ABI の使用方法の説明です。https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_dual_abi.html (英語)

日本語最新情報

最新情報を日本語で参照できます。

法務上の注意書き

インテルのテクノロジーを使用するには、対応したハードウェア、ソフトウェア、またはサービスの有効化が必要となる場合があります。

絶対的なセキュリティーを提供できる製品またはコンポーネントはありません。

実際の費用と結果は異なる場合があります。

© Intel Corporation. Intel、インテル、Intel ロゴ、その他のインテルの名称やロゴは、Intel Corporation またはその子会社の商標です。
* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

本資料は、(明示されているか否かにかかわらず、また禁反言によるとよらずにかかわらず) いかなる知的財産権のライセンスも許諾するものではありません。

本資料で説明されている製品には、エラッタと呼ばれる設計上の不具合が含まれている可能性があり、公表されている仕様とは異なる動作をする場合があります。現在確認済みのエラッタについては、インテルまでお問い合わせください。

インテルは、明示されているか否かにかかわらず、いかなる保証もいたしません。ここにいう保証には、商品適格性、特定目的への適合性、および非侵害性の黙示の保証、ならびに履行の過程、取引の過程、または取引での使用から生じるあらゆる保証を含みますが、これらに限定されるわけではありません。