oneapi::mkl::sparse::matmatd#

スパース行列とスパース行列の積を計算し、密 (デンス) な結果を生成します。

説明#

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

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

\[C \leftarrow \alpha\cdot\text{op}(A)\cdot\text{op}(B) + \beta\cdot C\]

説明: \(\alpha\)\(\beta\) はスカラー、\(A\)\(B\) はスパース行列、\(C\)c_nrowsc_ncols 列のデンス行列、\(\text{op()}\)AB に対する次の記述を使用する行列修飾子です:

\[\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}\]

デンス行列オブジェクト C は、行優先または列優先のレイアウトで格納されます。スパース行列オブジェクト AB には、行列積に適切な数の行と列があります。

API#

構文

SYCL* バッファーを使用:

namespace oneapi::mkl::sparse { 
    void matmatd(sycl::queue &queue, 
        oneapi::mkl::layout c_layout, 
        oneapi::mkl::transpose opA, 
        oneapi::mkl::transpose opB, 
        const DATA_TYPE alpha, 
        matrix_handle_t A, matrix_handle_t B,
        const DATA_TYPE beta, 
        sycl::buffer<DATA_TYPE, 1> &C const std::int64_t c_nrows, 
        const std::int64_t c_ncols, 
        const std::int64_t ldc); 
}

USM ポインターを使用:

namespace oneapi::mkl::sparse { 
    sycl::event matmatd( sycl::queue &queue, 
        oneapi::mkl::layout c_layout, 
        oneapi::mkl::transpose opA, 
        oneapi::mkl::transpose opB, 
        const DATA_TYPE alpha, 
        matrix_handle_t A, 
        matrix_handle_t B, 
        const DATA_TYPE beta, 
        DATA_TYPE *C, const std::int64_t c_nrows, 
        const std::int64_t c_ncols, 
        const std::int64_t ldc, 
        const std::vector<sycl::event> &dependencies = {}); 
}

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

  • oneapi/mkl/spblas.hpp

入力パラメーター#

queue

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

c_layout

デンス行列 C のメモリー内の保存方式を指定します。

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}\)

opB

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

oneapi::mkl::transpose::nontrans

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

oneapi::mkl::transpose::trans

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

oneapi::mkl::transpose::conjtrans

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

alpha

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

A

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

現在<sparse_matrix_type> でサポートされているは csr のみです。

B

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

現在<sparse_matrix_type> でサポートされているは csr のみです。

beta

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

C

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

layout=oneapi::mkl::layout::col_major

layout=oneapi::mkl::layout::row_major

行数 (C の行数)

ldc

c_ncols

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

c_nrows

ldc

c_nrows

行列 C の行数。

c_ncols

行列 C の列数。

ldc

C 行列の先頭次元を指定します。正の数値で、c_layout=oneapi::mkl::layout::row_major の場合 c_ncols 以上で、c_layout=oneapi::mkl::layout::col_major の場合 c_nrows以上である必要があります。

dependencies

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

出力パラメーター#

C

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

戻り値 (USM のみ)#

sycl::event

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

#

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

share/doc/mkl/examples/sycl/sparse_blas/source/csr_matmatd.cpp
share/doc/mkl/examples/sycl/sparse_blas/source/csr_matmatd_usm.cpp