インテル® 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 コマンドで環境スクリプトを実行して環境変数を設定する必要があります。
下記の手順に従って、SYCL* コードをコンパイルして実行します。
#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;
}
dpcpp simple-sycl-app.cpp -o simple-sycl-app
./simple-sycl-app
出力 (The results are correct!) が表示されます。
デバイスを指定するため、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;
}
}
次のステップに従って、Microsoft* Visual Studio* からコマンドラインを使用してコンパイラーを起動します。
コンパイラーを利用するには、Microsoft* Visual Studio* がインストールされていなければなりません。
ステップ 1: コマンドプロンプトを開く
ステップ 2: コンパイラーの起動
次のコマンドでコマンドラインからコンパイラーを起動します。
インテル® C++ コンパイラー・クラシックは、インテル® oneAPI HPC ツールキットおよびインテル® oneAPI IoT ツールキットに含まれています。次のコマンドでコマンドラインからコンパイラー・クラシックを起動します。
インテル® C++ コンパイラー・クラシックの起動に関する詳細は、「コンパイラーの起動」を参照してください。
次のコマンドで Linux* のコマンドラインからコンパイラーを起動します。
インテル® C++ コンパイラー・クラシックは、インテル® oneAPI HPC ツールキットおよびインテル® oneAPI IoT ツールキットに含まれています。次のコマンドでコマンドラインからコンパイラー・クラシックを起動します。
インテル® C++ コンパイラー・クラシックの起動に関する詳細は、「コンパイラーの起動」を参照してください。
次のステップに従って、Microsoft* Visual Studio* からコンパイラーを起動します。
ステップ 1: バイナリーのビルド
ステップ 2: ビルド構成の設定
Microsoft* Visual Studio* C++ コンパイラーからインテル® oneAPI DPC++/C++ コンパイラーへの変換
インテル® oneAPI DPC++/C++ コンパイラーから Microsoft* Visual Studio* C++ コンパイラーへの変換
この操作を行うと、選択したソリューション・ファイルで Microsoft* Visual Studio* C++ コンパイラーが使用されます。[Do not clean project(s)] を有効にしない限り、プロジェクトのすべての構成が自動でクリーンされます。プロジェクトのクリーンを選択しない場合は、更新プロジェクトをリビルドして、すべてのソースファイルが新しいコンパイラーでコンパイルできることを確認する必要があります。
次のステップに従って、Eclipse* CDT からコンパイラーを起動します。
ステップ 1: インテル® コンパイラー Eclipse* CDT プラグインをインストール
ステップ 2: 新規プロジェクトの作成または既存プロジェクトを開く
ステップ 3: ビルド構成の設定
コンテンツ |
説明とリンク |
---|---|
リリースノート (英語) |
リリースノートの既知の問題と最新情報を確認します。 |
DPC++、さまざまなターゲット・アクセラレーター向けのプログラミング、インテル® oneAPI ライブラリーの概要を含む、インテル® 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 またはその子会社の商標です。
* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
本資料は、(明示されているか否かにかかわらず、また禁反言によるとよらずにかかわらず) いかなる知的財産権のライセンスも許諾するものではありません。
本資料で説明されている製品には、エラッタと呼ばれる設計上の不具合が含まれている可能性があり、公表されている仕様とは異なる動作をする場合があります。現在確認済みのエラッタについては、インテルまでお問い合わせください。
インテルは、明示されているか否かにかかわらず、いかなる保証もいたしません。ここにいう保証には、商品適格性、特定目的への適合性、および非侵害性の黙示の保証、ならびに履行の過程、取引の過程、または取引での使用から生じるあらゆる保証を含みますが、これらに限定されるわけではありません。