DPC++ コードのホスト・コンパイラーとしてサードパーティーのコンパイラーを使用する

ここでは、外部ホスト・コンパイラー (G++) をインテル® oneAPI DPC++/C++ コンパイラーととも使用するために必要な手順を説明します。

この例では、ホスト・コンパイラーを使用してホスト・オブジェクトを生成し、最終的なリンクを実行します。ホスト・コンパイラーは、必要なヘッダーとライブラリーの場所を知っておく必要があります。例の手順に従って、ホストコードに G++ コンパイラー (g++) および DPC++ コードにインテル® oneAPI DPC++/C++ コンパイラー (dpcpp) を使用してデータ並列 C++ (DPC++) プログラムをビルドします。

Linux*

この例は次のコードを含みます。

  1. インテル® oneAPI ベース・ツールキット入門 (Linux* 版)」 (英語) に従ってビルド環境を設定します。

    ビルド環境に GCC バージョン 5.1 以降がインストールされていて、アクセスできる必要があります。

    source /opt/intel/oneapi/setvars.sh
  2. ヘッダーとライブラリーの場所を設定します。
    export LIBDIR=<Location of libsycl.so>
    export INCLUDEDIR=<Location of SYCL headers>
  3. デバイスのオブジェクトをビルドします。
    dpcpp -c a.cpp -fPIC -o a.o
    dpcpp -c b.cpp -fPIC -o b.o
  4. 統合ヘッダーファイル (ホスト・コンパイラーで使用_ を作成します。
    dpcpp -fsycl-device-only -Xclang -fsycl-int-header=a_host.h a.cpp
    dpcpp -fsycl-device-only -Xclang -fsycl-int-header=b_host.h b.cpp
  5. ホスト・オブジェクトを作成します。
    g++ -std=c++17 -c a.cpp -o a_host.o -include a_host.h -fPIC -I$INCLUDEDIR
    g++ -std=c++17 -c b.cpp -o b_host.o -include b_host.h -fPIC -I$INCLUDEDIR
  6. G++ を使用してほかの C++ コード (または非 DPC++ コード) をコンパイルします。
    g++ -std=c++17 main.cpp -c -fPIC -I$INCLUDEDIR
  7. デバイス・オブジェクトを作成します。
    dpcpp -fPIC -fsycl -fsycl-link a.o b.o -o device.o
  8. 必要なホスト・オブジェクトとデバイス・オブジェクトを含むアーカイブ libuser.a を作成します。

    このステップはオプションです。
    ar -rcs libuser.a a_host.o b_host.o device.o
  9. 最終的なリンクを実行して final.exe 実行ファイルを作成します。
    g++ main.o a_host.o b_host.o device.o -L$LIBDIR -lOpenCL -lsycl -o finalexe.exe 
  10. アーカイブを使用して final.exe をビルドします。

    このステップはオプションです。
    g++ main.o -Wl,--whole-archive libuser.a -Wl,--no-whole-archive -L$LIBDIR -lOpenCL -lsycl -o finalexe.exe

Windows*

このリリースでは Windows* はサポートされていません。

オプション

コンパイラーには、外部コンパイラーを使用してホスト側のコンパイルを実行できる 2 つのオプションがあります。オプションは次のとおりです。

関連情報