インテル® DPCT 名前空間の使用ガイド¶
インテル® DPCT 名前空間は、入力ソースコードの移行を支援するヘルパー関数とマクロを提供しています。インテル® DPCT 名前空間のヘルパー関数は、ヘッダーファイルで実装されており、インテル® DPC++ 互換性ツールのインストール・パスの include フォルダー (include/dpct) にあります。これらのヘッダーファイルは、インテル® DPC++ 互換性ツールによって生成される新しい DPC++ コードで使用されることを目的としています。必要に応じて、これらのヘッダーファイルをコピーし、生成されたコードにインクルードできます。
dpct::
と dpct::detail::
の 2 つの名前空間が定義されています。dpct::
は、インテル® DPC++ 互換性ツールによって生成されるコードで使用されます。dpct::detail::
は内部実装であり、dpct::detail::
名前空間内の API と実装は予告なしに変更される可能性があるため、DPC++ ソースファイルで直接使用すべきではありません。
注
移行後は、インテル® DPCT 名前空間のヘルパー関数とマクロをベースにするのではなく、DPC++、SYCL*、および C++ 標準 API を使用して開発を継続することを推奨します。
以下のセクションでは、ヘルパー関数とマクロのさまざまなドメインについて詳しく説明します。
マクロ¶
ヘルパー関数の動作を制御するため、DPCT_USM_LEVEL_NONE
、DPCT_NAMED_LAMBDA
、および DPCT_COMPATIBILITY_TEMP
の 3 つのマクロが用意されています。
注
これらのマクロは手動で定義しないでください。インテル® DPC++ 互換性ツールが、dpct
コマンドラインで指定されたオプションに応じて自動的に定義します。
|
|
|
|
|
|
アトミックヘルパー関数¶
アトミックヘルパー関数は、atomic.hpp
ヘッダーファイルにあります。アトミックヘルパー関数は、SYCL* の標準的なアトミック操作のラッパーです。
デバイスヘルパー関数¶
デバイスヘルパー関数は、device.hpp
ヘッダーファイルにあります。device_info
、device_ext
、および dev_mgr
の 3 つのクラスが定義されています。詳細は、device.hpp
ファイルを参照してください。
デバイスヘルパー関数クラス |
|
---|---|
|
|
|
|
|
|
ヘルパー関数 |
|
---|---|
|
デバイス・マネージャーの現在のデバイスを返します。 |
|
デバイス・マネージャーの現在のデバイスに関連付けられているデフォルトのキューを返します。 |
|
|
|
SYCL* CPU に関連付けられている |
|
デバイス・マネージャーの現在のデバイスに関連付けられているデフォルトのキューの SYCL* コンテキストを返します。 |
メモリーヘルパー関数¶
SYCL* バッファーベース・メモリー・モデルのヘルパー関数 |
|
---|---|
デバイス・メモリー・マネージャー ( |
デバイス・メモリー・マネージャーは、SYCL バッファーベース・メモリー・モデルが使用されている場合に、メモリー API 呼び出しの移行を支援するシングルトンです。 |
ホスト仮想アドレスから SYCL* バッファーを取得するヘルパー関数 |
|
---|---|
|
|
|
|
一般的なヘルパー関数
一般的なメモリーヘルパー関数は、USM とバッファーベースのメモリーモデルの両方で、メモリーの割り当て、メモリーコピー、メモリーセットなどのメモリー API 呼び出しの移行を支援するために使用されます。以下のヘルパー関数があります。詳細は、memory.hpp
ファイルを参照してください。
dpct_malloc()
dpct_free()
dpct_memcpy()
async_dpct_memcpy()
dpct_memset()
async_dpct_memset()
デバイスメモリー変数の移行を支援するヘルパー関数
グローバルおよび定数デバイスメモリー属性で宣言された変数の移行を支援するため、ヘルパー関数は以下のテンプレートクラスを提供します。
|
SYCL* グローバルメモリー変数を表します。 |
|
SYCL* 定数メモリー変数を表します。 |
|
DPC++ USM 共有メモリーと同様に、ホストとデバイスからアクセス可能なメモリーを表します。 |
メモリークラスの主要メンバー関数 |
|
---|---|
|
メモリー・オブジェクトのメモリーポインターを返します。バッファーベースのメモリーモデルを使用している場合は仮想ポインター、USM メモリーモデルを使用している場合はデバイスポインターとなります。 |
|
メモリー・オブジェクトのサイズを返します。 |
|
メモリー・オブジェクトのアクセサーを返します。USM メモリーモデルが使用されている場合、この関数はデバイス・メモリー・オブジェクトの |
|
SYCL* デバイスが選択された後にメモリーを割り当て、デバイスメモリーが初期値であれば初期化します。この API は、SYCL* デバイスを選択した後に呼び出す必要があります。 |
カーネルヘルパー関数¶
カーネルヘルパー関数は、DPC++ のカーネル情報を保持する構造体 kernel_function_info
とカーネル情報を取得するユーティリティー関数 get_kernel_function_info()
を提供します。
イメージヘルパー関数¶
イメージヘルパー関数は、テクスチャー API の移行を支援するクラスラッパーを提供します。イメージヘルパー関数の詳細は、image.hpp
ファイルを参照してください。
template class |
|
class |
SYCL* サンプラーと SYCL* イメージアクセサーをラップします。アクセサーからデータを読み取る |
class |
|
class |
イメージの 2D/3D 行列データを表します。イメージのチャネル情報、次元、各次元のサイズ、生データポインターが含まれています。 |
class |
イメージの 2D/3D ピッチ指定データを表します。 |
struct |
順番、データ幅、タイプ情報などのイメージチャネル情報を保持します。 |
class |
アドレス指定モード、フィルターモード、正規化モードを含む、画像のサンプリング情報。 |
|
指定されたパラメータに応じて、ヘルパー・イメージ・クラスのオブジェクトを作成します。 |
インテル® oneAPI DPC++ ライブラリー固有ユーティリティー・ヘルパー関数¶
アルゴリズム関数、メモリー関数、イテレーター、デバイス上のデータを管理するコンテナーなど、dpl_utils.hpp
にインクルードされたヘッダーファイルが提供するヘルパー関数です。
アルゴリズム・ヘルパー関数¶
アルゴリズム・ヘルパー関数は、dpl_extras/algorithm.h
ヘッダーファイルにあります。アルゴリズム・ヘルパー関数は、インテル® oneAPI DPC++ ライブラリー (インテル® oneDPL) アルゴリズム関数のラッパーです。
マスクプレディケート・アルゴリズム関数
マスクプレディケート・アルゴリズム関数には、C++ 標準ライブラリーにある同名のアルゴリズムと同様に、パラメーター・リストがあります。これらの関数は、関数のほかの入力の対応する要素をアルゴリズムで処理すべきかどうかを示す値のセットを指す、追加のイテレーターを受け取ります。これらの関数に提供されるプレディケートは、入力データの要素ではなく、マスクの値に適用され、プレディケートが true を返した場合、入力データの対応する要素がアルゴリズムによって操作されます。
以下のマスクプレディケート・アルゴリズム関数が dpl_extras/algorithm.h
ヘッダーファイルにあります。
copy_if
partition
partition_copy
remove_if
remove_copy_if
replace_if
replace_copy_if
stable_partition_copy
stable_partition
transform_if
キー値ペア・アルゴリズム関数
キー値ペア・アルゴリズム関数には、C++ 標準ライブラリーにある同名のアルゴリズムと同様に、パラメーター・リストがあります。この関数は、1 つの入力データではなく、2 つの入力データを受け取ります。1 つ目はキーのセット、2 つ目は各キーに関連する値のセットです。これらのアルゴリズム関数は、zip_iterators
を作成し、インテル® oneDPL で提供されている標準的なアルゴリズムを呼び出すことで、キー値ペアを単一のデータ要素として処理します。
以下のキー-値ペア・アルゴリズム関数が dpl_extras/algorithm.h
ヘッダーファイルにあります。
unique
unique_copy
merge
sort
stable_sort
set_difference
set_intersection
set_symmetric_difference
set_union
追加のアルゴリズム関数
|
実行ポリシーを受け取り、並列実行を可能にする C++ 標準ライブラリーのアルゴリズムの実装。 |
|
提供されたプレディケートが true を返す入力のすべての要素に単項演算を適用します。この関数のマスクプレディケート・バージョンも用意されています。 |
|
入力イテレーターと初期値に加えてステップを受け取るように、C++ 標準ライブラリーのアルゴリズムを拡張します。ステップは、生成されるシーケンスの次の値を計算するために使用されます。 |
|
実行ポリシーを受け取り、並列実行を可能にする C++ 標準ライブラリーのアルゴリズムの実装。リダクションを行う二項演算は、結合的かつ可換でなければなりません。 |
|
入力レンジの各要素に、その要素のインデックスを指定して呼び出した単項演算の結果を割り当てます。 |
メモリーヘルパー関数¶
dpl_extras/memory.h
ヘッダーファイルは、デバイスメモリーを操作するためのクラスと関数を提供します。
メモリーヘルパー関数クラス |
|
---|---|
|
デバイス上のメモリーへのポインター型。 |
|
|
|
|
device_iterator
クラスと device_reference
クラスを使用する device_vector
実装は、dpl_extras/vector.h
で定義されています。
メモリーヘルパー関数 |
|
---|---|
|
デバイスで使用するメモリーを割り当てます。 |
|
|
|
指定された型の要素を要求された数だけ保持するのに十分な大きさの、デバイスで使用するメモリーを割り当てます。 |
|
|
|
生ポインターから |
|
|
その他のインテル® oneAPI DPC++ ライブラリー固有ユーティリティー・ヘルパー・ファイル¶
|
上記のアルゴリズム関数の定義に使用される関数オブジェクトの実装が含まれています。 |
|
ある値で構築され、逆参照時にその値を返す |
|
デバイスメモリーに格納されたデータ要素を管理する |
ユーティリティー・ヘルパー関数¶
|
一般的なユーティリティー・ヘルパー関数 |
|
BLAS 固有のユーティリティー・ヘルパー関数。 |