oneapi::mkl::sparse::gemm#

スパース行列とデンス行列の積を計算します。

説明#

サポートされている <DATA_TYPE><INT_TYPE> データタイプと整数タイプの一覧については、Sparse BLAS でサポートされているデータと整数タイプを参照してください。また、スローされる可能性のある例外の詳細については、エラー処理を参照してください。

oneapi::mkl::sparse::gemm ルーチンは、次のように定義されるスパース行列とデンス行列の積を計算します

\[Y \leftarrow \alpha\cdot\text{op}(A)\cdot\text{op}(X) + \beta\cdot Y\]

説明: \(\alpha\)\(\beta\) はスカラー、\(A\)num_rowsnum_cols 列のスパース行列、\(\text{op()}\)AX に対して次の記述を使用する行列修飾子です:

\[\begin{split}\text{op}(A) = \begin{cases} A,& \text{ oneapi::mkl::transpose::nontrans}\\ A^{T},& \text{ oneapi::mkl::transpose::trans}\\A^{H},& \text{ oneapi::mkl::transpose::conjtrans.}\end{cases}\end{split}\]

デンス行列オブジェクト XY は、行優先または列優先のレイアウトで格納され、行列積に適切な行数と columns 数を持ちます。

API#

構文

SYCL* バッファーを使用:

namespace oneapi::mkl::sparse { 
    void gemm(sycl::queue &queue, 
        oneapi::mkl::layout layout_val, 
        oneapi::mkl::transpose opA, 
        oneapi::mkl::transpose opX, 
        const DATA_TYPE alpha, 
        matrix_handle_t A, 
        sycl::buffer<DATA_TYPE, 1> &X, 
        const std::int64_t columns, 
        const std::int64_t ldx, 
        const DATA_TYPE beta, 
        sycl::buffer<DATA_TYPE, 1> &Y, 
        const std::int64_t ldy); 
}

USM ポインターを使用:

namespace oneapi::mkl::sparse { 
    sycl::event gemm( 
        sycl::queue &queue, 
        oneapi::mkl::layout layout_val, 
        oneapi::mkl::transpose opA, 
        oneapi::mkl::transpose opX, 
        const DATA_TYPE alpha, 
        matrix_handle_t A, 
        const DATA_TYPE *X, 
        const std::int64_t columns, 
        const std::int64_t ldx, 
        const DATA_TYPE beta, 
        DATA_TYPE *Y, 
        const std::int64_t ldy, 
        const std::vector<sycl::event> &dependencies = {}); 
}

oneMKL 2024.0 リリースでは、デンス行列レイアウトや行列 X の opX フラグをサポートしない oneapi::mkl::sparse::gemm API が削除されました。削除された古い oneapi::mkl::sparse::gemm API を使用する場合、次の例のように、layout_val パラメーターに oneapi::mkl::layout::row-major を渡し、opX パラメーターに oneapi::mkl::transpose::nontrans を渡して、API 呼び出しを更新します。

int main() { 
    ...     // SYCL バッファーを使用する場合 
    oneapi::mkl::sparse::gemm(queue, oneapi::mkl::layout::row_major, opA, oneapi::mkl::transpose:nontrans, alpha, A, X, ... ); 

    または 

    // USM ポインターを使用する場合 
    auto ev_gemm = oneapi::mkl::sparse::gemm(queue, oneapi::mkl::layout::row_major, opA, oneapi::mkl::transpose:nontrans, alpha, A, X, ... ); ...}

インクルード・ファイル#

  • oneapi/mkl/spblas.hpp

入力パラメーター#

queue

SYCL* カーネルの実行に使用される SYCL* コマンドキューを指定します。

layout_val

デンス行列のメモリー内の保存方式を指定します。このレイアウトは、デンス行列 XY の両方に適用されることに注意してください。

opA

入力行列 A に対する演算 op() を指定します。

oneapi::mkl::transpose::nontrans

非転置、\(\text{op}(A) = A\)

oneapi::mkl::transpose::trans

転置、\(\text{op}(A) = A^{T}\)

oneapi::mkl::transpose::conjtrans

共役転置、\(\text{op}(A) = A^{H}\)

opX

入力行列 X に対する演算 op() を指定します。

oneapi::mkl::transpose::nontrans

非転置、\(\text{op}(X) = X\)

oneapi::mkl::transpose::trans

転置、\(\text{op}(X) = X^{T}\)

oneapi::mkl::transpose::conjtrans

共役転置、\(\text{op}(X) = X^{H}\)

現在、サポートされている操作は oneapi::mkl::transpose::nontrans のみです。

alpha

スカラー \(\alpha\) を指定します。

A

スパース行列およびその他の内部データを含むオブジェクトへのハンドル。oneapi::mkl::sparse::set_<sparse_matrix_type>_data ルーチンの 1 つを使用して作成されます。

X

rows*cols 以上のサイズを持つSYCL* バッファーまたはデバイスアクセス可能な USM ポインターのサイズは rows*cols 以上です。

layout=oneapi::mkl::layout::col-major

layout=oneapi::mkl::layout::row-major

行数 (X の行数)

ldx

\(\text{op}(A) = A\) の場合、A の列数

\(\text{op}(A) = A^{T}\) の場合、A の行数

cols (cols(Cの列数) の列数)

columns

ldx

columns

行列 Y の列数。

ldx

X 行列の先頭次元を指定します。正の数値で、layout_val=oneapi::mkl::layout::row-major の場合 columns 以上で、layout_val=oneapi::mkl::layout::col-major の場合 A以上の列数である必要があります。

beta

スカラー \(\beta\) を指定します。

Y

SYCL* バッファーまたはデバイスアクセス可能な USM ポインターのサイズは rows*cols 以上です。説明:

layout=oneapi::mkl::layout::col-major

layout=oneapi::mkl::layout::row-major

行数 (Y の行数)

ldy

\(\text{op}(A) = A\) の場合、A 行数

\(\text{op}(A) = A^{T}\) の場合、A 列数

cols (cols(Cの列数) の列数)

columns

ldy

ldy

Y 行列の先頭次元を指定します。正の数値で、layout_val=oneapi::mkl::layout::row-major の場合 columns 以上で、layout_val=oneapi::mkl::layout::col-major の場合 A以上の行数である必要があります。

dependencies

oneapi::mkl::sparse::gemm ルーチンが依存するイベントのリストを含む、std::vector<sycl::event> タイプのベクトル。

出力パラメーター#

Y

更新された行列 Y によって上書きされます。

戻り値 (USM のみ)#

sycl::event

gemm ルーチンの完了を待機したり、依存関係として追加できる SYCL* イベント。

#

SYCL* バッファーまたは USM ポインターで oneapi::mkl::sparse::gemm を使用する例は、oneMKL インストール・ディレクトリーの以下の場所にあります。

share/doc/mkl/examples/sycl/sparse_blas/source/csr_gemm_row_major.cpp
share/doc/mkl/examples/sycl/sparse_blas/source/csr_gemm_row_major_usm.cpp
share/doc/mkl/examples/sycl/sparse_blas/source/csr_gemm_col_major.cpp
share/doc/mkl/examples/sycl/sparse_blas/source/csr_gemm_col_major_usm.cpp