スパース 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::omatadd API で使用するアルゴリズム |
|
sparse::omatadd APIで使用する不透明な記述子オブジェクトへのポインター |
|
sparse::set_matmat_data API で使用する |
|
sparse::matmat API で使用する |
|
sparse::matmat_descr_t |
sparse::matmat APIで使用する不透明な記述子オブジェクトへのポインター |
sparse::omatconvert API で使用するアルゴリズム |
|
sparse::omatconvert APIで使用する不透明な記述子オブジェクトへのポインター |
これらのスパース BLAS 操作を可能にするルーチンは、次の 4 つのグループに分けられます。
状態管理ルーチン
Analysisルーチン (検査ステージルーチンまたは最適化ステージルーチンとも呼ばれます)ExecutionルーチンHelperルーチン。
状態管理ルーチンには、sparse::matrix_handle_t や sparse::matmat_descr_t など各種スパース・オブジェクトのデータ、形式、プロパティーを設定する初期化、破棄、および API が含まれます。
analysis ルーチンでは、ライブラリーはサイズ、スパースパターン、利用可能な並列処理などの行列プロパティーを検査し、行列形式または構造の変更を適用する新しいデータ構造またはユーザーデータのコピーを作成し、目的の操作に対して最適化されたアルゴリズムを有効にすることができます。このような解析や最適化によってユーザーデータは変更されません。analysis ルーチンで適用された最適化は、パフォーマンスを向上させるため複数の execution ルーチンで再利用できます。特定の行列では、analysis ルーチンは通常、操作ごとに 1 回だけ呼び出されますが、対応する execution ルーチンは複数回呼び出されることがあります。
execution ルーチンでは、実行列 - 行列演算、行列 - ベクトル演算が行われますが、ハンドルに格納されているデータ、最適化、およびプロパティーにより必要な演算を実行する場合があります。
helper ルーチンは、行列ハンドル内のデータを操作し、他のハンドルへのデータのコピー/転置、ハンドル内でのデータの並べ替え、あるハンドルから別のハンドルへのスパース行列形式の変換などを行う場合があります。
状態管理ルーチン |
データタイプ |
説明 |
|---|---|---|
N/A |
|
|
N/A |
|
|
float, double, std::complex<float>, std::complex<double> |
|
|
float, double, std::complex<float>, std::complex<double> |
|
|
N/A |
最適化のヒントを与える、ユーザー指定の行列データの特別なプロパティーを |
|
N/A |
|
|
N/A |
|
|
N/A |
|
|
N/A |
|
|
N/A |
|
|
N/A |
|
|
N/A |
|
|
N/A |
|
解析ルーチン |
データタイプ |
説明 |
|---|---|---|
N/A |
sparse::gemv 操作内部の最適化を行います。 |
|
N/A |
sparse::trmv 操作内部の最適化を行います。 |
|
N/A |
sparse::trsv 操作内部の最適化を行います。 |
|
N/A |
sparse::trsm 操作内部の最適化を行います。 |
実行ルーチン |
データタイプ |
説明 |
|---|---|---|
float, double, std::complex<float>, std::complex<double> |
一般的なスパース行列とデンスベクトルの積 |
|
float, double, std::complex<float>, std::complex<double> |
一般的なスパース行列とデンスベクトルの積と融合ドット積 |
|
float, double, std::complex<float>, std::complex<double> |
対称スパース行列とデンスベクトルの積 |
|
float, double, std::complex<float>, std::complex<double> |
三角スパース行列とデンスベクトルの積 |
|
float, double, std::complex<float>, std::complex<double> |
スパース行列をデンスベクトルに対して三角法を解きます。 |
|
float, double, std::complex<float>, std::complex<double> |
一般スパース行列とデンス行列の積 |
|
float, double, std::complex<float>, std::complex<double> |
スパース行列をデンス行列に対して三角法を解きます。 |
|
float, double, std::complex<float>, std::complex<double> |
一般スパース行列とスパース行列の加算 |
|
float, double, std::complex<float>, std::complex<double> |
一般スパース行列とスパース行列の積 |
|
float, double, std::complex<float>, std::complex<double> |
2つのスパース行列の積とデンス行列の結果 |
ヘルパールーチン |
データタイプ |
説明 |
|---|---|---|
float, double, std::complex<float>, std::complex<double> |
一般スパース行列のアウトオブプレースのコピー/転置を新しい行列ハンドルに対して行います |
|
float, double, std::complex<float>, std::complex<double> |
一般スパース行列のアウトオブプレース変換を新しい行列ハンドルに変換します |
|
float, double, std::complex<float>, std::complex<double> |
行列ハンドル内の行列形式の一般スパース行列ソート |
|
float, double, std::complex<float>, std::complex<double> |
行列ハンドルの主対角要素の値を変更します |