インテル® oneAPI DPC++ ライブラリー (インテル® oneDPL) は、インテル® oneAPI DPC++/C++ コンパイラーと連携して、開発者に生産性の高い API を提供します。さまざまなデバイスにわたるハイパフォーマンス並列アプリケーションの SYCL* プログラミング作業を最小限に抑えることができます。
インテル® oneDPL には、次のコンポーネントが含まれます。
並列 API
SYCL* カーネル向け API
マクロ
インテル® oneDPL についての一般的な情報は、oneDPL GitHub* リポジトリー (英語)、インテル® oneAPI DPC++ ライブラリー・ガイド (英語)、インテル® oneAPI DPC++ ライブラリーの製品ページ (英語) を参照してください。
インテル® oneDPL の「リリースノート」 (英語) の次のセクションを確認します。
リリースの入手方法
概要
新機能
修正された問題
既知の問題と制限事項
インテル® oneDPL を使用するには、インテル® oneAPI ベース・ツールキット (ベースキット) をインストールします。
並列 API を使用するには、対応するヘッダーファイルをソースコードにインクルードします。
すべてのインテル® oneDPL ヘッダーファイルは、oneapi/dpl ディレクトリーにあります。#include <oneapi/dpl/…> でインクルードします。インテル® oneDPL のほとんどのクラスと関数は、oneapi::dpl 名前空間を使用します。
検証済みの C++ 標準 API を使用するには、対応する C++ 標準ヘッダーファイルをインクルードして、std 名前空間を使用する必要があります。
インストールされているライブラリーに関する情報を取得し、1 つ以上のライブラリーをコンパイルおよびリンクするには、pkg-config プログラムを使用します。
pkg-config をインテル® oneDPL で使用する
pkg-config を --cflags フラグとともに使用して、インテル® oneDPL ディレクトリーのインクルード・パスを取得します。
dpcpp test.cpp $(pkg-config --cflags dpl)
Microsoft* Visual C++* コンパイラーを使用する場合は、--msvc-syntax フラグが必要です。このフラグを指定すると、コンパイルフラグとリンクフラグが適切な形式に変換されます。
dpcpp test.cpp $(pkg-config --msvc-syntax --cflags dpl)
インテル® oneDPL のサンプルコードは oneAPI GitHub* サンプル・リポジトリー (英語) から入手できます。各サンプルには、ビルド手順を含む README があります。
<oneapi/dpl/random> ヘッダーの使用例
このサンプルは、インテル® oneDPL 乱数ジェネレーターの使い方を説明します。乱数ジェネレーター・エンジン・オブジェクト (疑似乱数のソース)、分布オブジェクト (確率分布の指定)、および乱数そのものの生成方法を示します。乱数ジェネレーターは、計算速度を向上するためベクトル化されます。
この例は、デフォルトの SYCL* デバイスで計算を実行します。SYCL_DEVICE_TYPE 環境変数を CPU または GPU に設定できます。
template<int VecSize>
void random_fill(float* usmptr, std::size_t n) {
auto zero = oneapi::dpl::counting_iterator<std::size_t>(0);
std::for_each(oneapi::dpl::execution::dpcpp_default,
zero, zero + n/VecSize,
[usmptr](std::size_t i) {
auto offset = i * VecSize;
oneapi::dpl::minstd_rand_vec<VecSize> engine(seed, offset);
oneapi::dpl::uniform_real_distribution<sycl::vec<float, VecSize>> distr;
auto res = distr(engine);
res.store(i, sycl::global_ptr<float>(usmptr));
});
}
Pi ベンチマークの使用例
この例は、モンテカルロ法を使用して π の値を推定します。基本的な考え方は、正方形の中にランダムな点を生成し、そのランダムな点のうち何割が正方形に内接する 1/4 円の中にあるかを調べるというものです。期待値は、1/4 円と正方形の面積の比 (π/4) です。観測された 1/4 円の中にある点の割合を、π/4 の推定値とすることができます。
この例では、乱数ジェネレーター・エンジン・オブジェクト (擬似乱数のソース) と分布オブジェクト (確率分布の指定) を作成して乱数を生成し、正方形 S に収まる点の数をカウントするリダクションを実行します。コードを簡素化するため、乱数生成はスカラー形式で実行されます。
float estimated_pi;
{
sycl::queue q(sycl::gpu_selector{});
auto policy = oneapi::dpl::execution::make_device_policy(q);
float sum = std::transform_reduce( policy,
oneapi::dpl::counting_iterator<int>(0),
oneapi::dpl::counting_iterator<int>(N),
0.0f,
std::plus<float>{},
[=](int n){
float local_sum = 0.0f;
oneapi::dpl::minstd_rand engine(SEED, n * ITER * 2);
oneapi::dpl::uniform_real_distribution<float> distr;
for(int i = 0; i < ITER; ++i) {
float x = distr(engine);
float y = distr(engine);
if (x * x + y * y <= 1.0)
local_sum += 1.0;
}
return local_sum / (float)ITER;
}
);
estimated_pi = 4.0f * (float)sum / N;
}
リソースのリンク | 説明 |
---|---|
インテル® oneAPI DPC++ ライブラリー・ガイド (英語) | インテル® oneDPL に関する詳細な情報を提供します。 |
システム要件 (英語) | インテル® oneDPL をしンストールする前にシステム要件を確認してください。 |
インテル® oneAPI DPC++ ライブラリー・リリースノート (英語) | 最新リリースでの変更点を確認できます。 |
インテル® oneDPL サンプル (英語) | サンプルを使用して、インテル® oneDPL の使用法を学べます。 |
Yocto* Project 用のレイヤー (英語) | meta-intel レイヤーを使用して Yocto* Project のビルドに oneAPI コンポーネントを追加します。 |
日本語最新情報 | 最新情報を日本語で参照できます。 |