DPC++ 対応インテル® oneMKL スパース BLAS の概要#
次のページでは、DPC++ 対応 oneMKL スパース BLAS 計算ルーチンについて詳しく説明します。これらのルーチンは、他のヘルパールーチン (完全なリストについては スパース BLAS ルーチン を参照) とともに、oneapi/mkl/spblas.hpp ヘッダーファイルで宣言されています。
このドキュメント全体でいくつかの規則が使用されています。
DPC++ データタイプおよび非ドメイン固有関数のすべての oneMKL は、
oneapi::mkl::名前空間内にあります。DPC++ のすべての oneMKL DPC 関数は、
oneapi::mkl::sparse名前空間内にあります。簡潔にするために、バッファーやキューなどの DPC++ オブジェクト・タイプの
sycl名前空間は省略されます。たとえば、単精度の 1D バッファーAは、sycl::buffer<float,1> &Aではなく、buffer<float,1> &Aと記述されます。計算ルーチンは精度にオーバーロードされます。特に指定がない限り、すべての oneMKL スパース BLAS 計算ルーチンは
float、double、std::complex<float>、およびstd::complex<double>浮動小数点タイプをサポートしますが、混合精度計算はまだサポートしていません。oneMKL スパース BLAS ドメインは現在、ほとんどの API に対してビット単位の再現性 (BWR) を保証していません。
スパース行列の行と列のインデックスの場合、oneMKL スパース BLAS は、サポートされているすべての行列形式に対して
std::int32_tおよびstd::int64_t整数タイプをサポートします。行列ハンドル作成ルーチンは整数タイプでオーバーロードされます。一部の API では、ユーザーが提供する一時的なワークスペースが必要です。
sycl::bufferAPI の場合、一時ワークスペースはsycl::buffer<std::uint8_t, 1> *タイプですが、USM API の場合はvoid *タイプになります。USM API のユーザーの場合、すべてのタイプの割り当て (
デバイス、共有、ホスト) で oneMKL がサポートされていますが、パフォーマンスは異なる場合があります。スパース BLAS API のパフォーマンスを最大限に高めるには、特に指定がない限り、可能な限りデバイスメモリー割り当て (sycl::malloc_device()) を備えた oneMKL を使用することを推奨しますが、それに関連する明示的なデータ移動はユーザーの責任となります。
デバイスサポート#
DPC++ は次のタイプのデバイスをサポートします。
CPU デバイス: OpenCL* を使用して CPU 上で計算を行います。
GPU デバイス: OpenCL* またはレベルゼロを使用して GPU 上で計算を行います。
各ルーチンには、現在サポートされているデバイスタイプの詳細が示されています。
oneMKL DPC++ スパース BLAS の現在のリリースでは、特に明記しない限り、リストされているすべてのルーチンは、圧縮スパース行 (CSR) 行列形式の CPU および GPU デバイスでの使用をサポートしています。各 API のドキュメントに指定されている、座標 (COO) 行列形式の限定サポートも利用できます。
ルーチン |
説明 |
|---|---|
レベル 2: |
|
一般的なスパース行列とデンスベクトルの積 |
|
一般的なスパース行列とデンスベクトルの積と融合ドット積 |
|
対称スパース行列とデンスベクトルの積 |
|
三角スパース行列とデンスベクトルの積 |
|
スパース行列をデンスベクトルに対して三角法を解きます。 |
|
レベル 3: |
|
一般的なスパース行列とデンス行列の積とデンス行列の出力。 |
|
スパース行列をデンス行列に対して三角法を解きます。 |
|
一般的なスパース行列とスパース行列の加算とスパース行列出力。 |
|
スパース行列出力を伴う一般的なスパース行列-スパース行列積。 |
|
一般的なスパース行列-スパース行列の積と密 (スパース) 行列出力。 |