スパース BLAS ルーチン

スパース BLAS ルーチン#

インテル® oneMKL は、一部のスパース BLAS ルーチンに SYCL* をサポートする C++ インターフェイスを提供します。ここでは、oneMKL に含まれるスパース BLAS ルーチンについて説明します。

スパース BLAS ドメインは、スパース行列とベクトルに対する基本的な操作を提供します。スパース行列を包含し、スパース BLAS ドメインで使用される基本オブジェクトは sparse::matrix_handle_t です。ライブラリー API がハンドルと対話する方法、およびユーザーとライブラリーの両方に対する行列ハンドルに関する使用規約については、ユーザーとライブラリー間のスパース BLAS 行列ハンドル規約を参照してください。sparse::matrix_handle_t オブジェクトで現在サポートされているスパース行列形式については、スパースストレージ形式を参照してください。このメインのスパース行列ハンドルに加えて、スパース BLAS ドメインの一部である他のデータ構造と enum オブジェクトがあり、以下の表にリストされています。

構造体/列挙型

説明

sparse::matrix_handle_t

不透明なスパース行列オブジェクトへのポインター

sparse::property

ユーザーが提供する行列データの保証 (ソートされた入力データなど)

sparse::omatadd_alg

sparse::omatadd API で使用するアルゴリズム enum

sparse::omatadd_descr_t

sparse::omatadd APIで使用する不透明な記述子オブジェクトへのポインター

sparse::matrix_view_descr

sparse::set_matmat_data API で使用する enum

sparse::matmat_request

sparse::matmat API で使用する enum

sparse::matmat_descr_t

sparse::matmat APIで使用する不透明な記述子オブジェクトへのポインター

sparse::omatconvert_alg

sparse::omatconvert API で使用するアルゴリズム enum

sparse::omatconvert_descr_t

sparse::omatconvert APIで使用する不透明な記述子オブジェクトへのポインター

これらのスパース BLAS 操作を可能にするルーチンは、次の 4 つのグループに分けられます。

  1. 状態管理ルーチン

  2. Analysis ルーチン (検査ステージルーチンまたは最適化ステージルーチンとも呼ばれます)

  3. Execution ルーチン

  4. Helper ルーチン。

状態管理ルーチンには、sparse::matrix_handle_tsparse::matmat_descr_t など各種スパース・オブジェクトのデータ、形式、プロパティーを設定する初期化、破棄、および API が含まれます。

analysis ルーチンでは、ライブラリーはサイズ、スパースパターン、利用可能な並列処理などの行列プロパティーを検査し、行列形式または構造の変更を適用する新しいデータ構造またはユーザーデータのコピーを作成し、目的の操作に対して最適化されたアルゴリズムを有効にすることができます。このような解析や最適化によってユーザーデータは変更されません。analysis ルーチンで適用された最適化は、パフォーマンスを向上させるため複数の execution ルーチンで再利用できます。特定の行列では、analysis ルーチンは通常、操作ごとに 1 回だけ呼び出されますが、対応する execution ルーチンは複数回呼び出されることがあります。

execution ルーチンでは、実行列 - 行列演算、行列 - ベクトル演算が行われますが、ハンドルに格納されているデータ、最適化、およびプロパティーにより必要な演算を実行する場合があります。

helper ルーチンは、行列ハンドル内のデータを操作し、他のハンドルへのデータのコピー/転置、ハンドル内でのデータの並べ替え、あるハンドルから別のハンドルへのスパース行列形式の変換などを行う場合があります。

状態管理ルーチン

データタイプ

説明

sparse::init_matrix_handle

N/A

sparse::matrix_handle_t オブジェクトを初期化します

sparse::release_matrix_handle

N/A

sparse::matrix_handle_t オブジェクトを解放します

sparse::set_csr_data

float, double, std::complex<float>, std::complex<double>

sparse::matrix_handle_t の内部表現を、ユーザー指定の CSR データ配列を使用して圧縮スパース行 (CSR) 形式に設定します。

sparse::set_coo_data

float, double, std::complex<float>, std::complex<double>

sparse::matrix_handle_t の内部表現を、ユーザー指定の COO データ配列を使用して座標 (COO) 形式に設定します。

sparse::set_matrix_property

N/A

最適化のヒントを与える、ユーザー指定の行列データの特別なプロパティーを sparse::matrix_handle_t に設定します。

sparse::init_omatadd_descr

N/A

sparse::omatadd_descr_t オブジェクトを初期化します。sparse::omatadd で使用します

sparse::release_omatadd_descr

N/A

sparse::omatadd_descr_t オブジェクトを解放します。sparse::omatadd で使用します

sparse::init_matmat_descr

N/A

sparse::matmat_descr_t オブジェクトを初期化します。sparse::matmat で使用します

sparse::set_matmat_data

N/A

sparse::matmat_descr_t オブジェクトに必要とする操作の説明を入力します。sparse::matmat で使用します

sparse::get_matmat_data

N/A

sparse::matmat_descr_t オブジェクトに格納されている操作の説明を照会します。sparse::matmat で使用します

sparse::release_matmat_descr

N/A

sparse::matmat_descr_t オブジェクトを解放します。sparse::matmat で使用します

sparse::init_omatconvert_descr

N/A

sparse::omatconvert_descr_t オブジェクトを初期化します。sparse::omatconvert で使用します

sparse::release_omatconvert_descr

N/A

sparse::omatconvert_descr_t オブジェクトを解放します。sparse::omatconvert で使用します

解析ルーチン

データタイプ

説明

sparse::optimize_gemv

N/A

sparse::gemv 操作内部の最適化を行います。

sparse::optimize_trmv

N/A

sparse::trmv 操作内部の最適化を行います。

sparse::optimize_trsv

N/A

sparse::trsv 操作内部の最適化を行います。

sparse::optimize_trsm

N/A

sparse::trsm 操作内部の最適化を行います。

実行ルーチン

データタイプ

説明

sparse::gemv

float, double, std::complex<float>, std::complex<double>

一般的なスパース行列とデンスベクトルの積

sparse::gemvdot

float, double, std::complex<float>, std::complex<double>

一般的なスパース行列とデンスベクトルの積と融合ドット積

sparse::symv

float, double, std::complex<float>, std::complex<double>

対称スパース行列とデンスベクトルの積

sparse::trmv

float, double, std::complex<float>, std::complex<double>

三角スパース行列とデンスベクトルの積

sparse::trsv

float, double, std::complex<float>, std::complex<double>

スパース行列をデンスベクトルに対して三角法を解きます。

sparse::gemm

float, double, std::complex<float>, std::complex<double>

一般スパース行列とデンス行列の積

sparse::trsm

float, double, std::complex<float>, std::complex<double>

スパース行列をデンス行列に対して三角法を解きます。

sparse::omatadd

float, double, std::complex<float>, std::complex<double>

一般スパース行列とスパース行列の加算

sparse::matmat

float, double, std::complex<float>, std::complex<double>

一般スパース行列とスパース行列の積

sparse::matmatd

float, double, std::complex<float>, std::complex<double>

2つのスパース行列の積とデンス行列の結果

ヘルパールーチン

データタイプ

説明

sparse::omatcopy

float, double, std::complex<float>, std::complex<double>

一般スパース行列のアウトオブプレースのコピー/転置を新しい行列ハンドルに対して行います

sparse::omatconvert

float, double, std::complex<float>, std::complex<double>

一般スパース行列のアウトオブプレース変換を新しい行列ハンドルに変換します

sparse::sort_matrix

float, double, std::complex<float>, std::complex<double>

行列ハンドル内の行列形式の一般スパース行列ソート

sparse::update_diagonal_values

float, double, std::complex<float>, std::complex<double>

行列ハンドルの主対角要素の値を変更します