oneapi::mkl::sparse::gemm#
スパース行列とデンス行列の積を計算します。
説明#
注
サポートされている <DATA_TYPE> と <INT_TYPE> データタイプと整数タイプの一覧については、Sparse BLAS でサポートされているデータと整数タイプを参照してください。また、スローされる可能性のある例外の詳細については、エラー処理を参照してください。
oneapi::mkl::sparse::gemm ルーチンは、次のように定義されるスパース行列とデンス行列の積を計算します
説明: \(\alpha\) と \(\beta\) はスカラー、\(A\) は num_rows 行 num_cols 列のスパース行列、\(\text{op()}\) は A と X に対して次の記述を使用する行列修飾子です:
デンス行列オブジェクト X と Y は、行優先または列優先のレイアウトで格納され、行列積に適切な行数と 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
デンス行列のメモリー内の保存方式を指定します。このレイアウトは、デンス行列
XとYの両方に適用されることに注意してください。- 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-majorlayout=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-majorlayout=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.cppshare/doc/mkl/examples/sycl/sparse_blas/source/csr_gemm_row_major_usm.cppshare/doc/mkl/examples/sycl/sparse_blas/source/csr_gemm_col_major.cppshare/doc/mkl/examples/sycl/sparse_blas/source/csr_gemm_col_major_usm.cpp