oneapi::mkl::sparse::set_matrix_property#
ライブラリー・アルゴリズムへの最適化のヒントとして使用できる、sparse::matrix_handle_t に提供されるユーザー提供データ内に存在する行列プロパティーを設定します。プロパティーはライブラリーによって検証されませんが、指定したユーザーからは真として受け入れられます。
説明#
oneapi::mkl::sparse::set_matrix_property ルーチンを使用すると、ユーザーは sparse::matrix_handle_t オブジェクト内のユーザー指定の行列データのプロパティーを設定でき、これらのプロパティーは後続のライブラリー呼び出しで内部アルゴリズムのヒントとして機能します。
列挙のクラス oneapi::mkl::sparse::property は、oneapi/mkl/spblas.hppヘッダーファイルで定義されています。
namespace oneapi::mkl::sparse {
enum class property : char {
symmetric,
sorted
};
}ここで、symmetric は、行列が対称であり、完全なパターンがデータ配列に存在することを意味します。sorted プロパティーは、行列データが特定の行列形式に自然な方法で並べ替えられていることを示します。ソートの詳細については、sparse::sort_matrix を参照してください。ライブラリーはこれらのプロパティーが真であるかどうかは検証しませんが、ユーザーからの情報を真として受け取ります。これらを設定すると、特定の内部最適化が行われない可能性があるため、パフォーマンスに影響する場合があります。適用可能であれば (たとえば、sparse::sort_matrix の呼び出し後)、プロパティーはライブラリーによって内部的に設定されることもあります。
行列のプロパティーを設定する一般的な使用モデルは次のとおりです:
using namespace oneapi::mkl;
sparse::matrix_handle_t spMat = nullptr;
sparse::init_matrix_handle(&spMat);
sparse::set_csr_data(main_queue, spMat, nrows, nrows,
index_base::zero, ia_buffer, ja_buffer, a_buffer);
// csr ia/ja/a配列は、各行の列が増加するようにソートされた完全な正方対称行列であるため、
// 対称性とソートされたプロパティーの両方を設定できます。
sparse::set_matrix_property(spMat, sparse::property::symmetric);
sparse::set_matrix_property(spMat, sparse::property::sorted);
sparse::optimize_trsv(main_queue, uplo::lower, transpose::nontrans,
diag::nonunit, spMat);
sparse::optimize_trsv(main_queue, uplo::upper, transpose::nontrans,
diag::nonunit, spMat);
sparse::optimize_gemv(main_queue, transpose::nontrans, spMat);
// trsv/gemv 算を使用して何らかのアルゴリズムを実装する
// (対称ガウスザイデル前処理付き共役勾配アルゴリズムなど)
sparse::release_matrix_handle(&spMat);API#
構文
namespace oneapi::mkl::sparse {
void set_matrix_property(oneapi::mkl::sparse::matrix_handle_t spMat,
oneapi::mkl::sparse::property property_value);
}インクルード・ファイル#
oneapi/mkl/spblas.hpp
入力パラメーター#
- spMat
プロパティーが設定されるスパース行列およびその他の内部データを含むオブジェクトへのハンドル。
oneapi::mkl::sparse::set_<sparse_matrix_type>_dataルーチンの 1 つを使用して作成されます。注
<sparse_matrix_type>でサポートされているケースは、CPU と GPU デバイスの両方でcsrとcooです。COO 形式の行列では、propertyは現在無視されますが、今後この形式のパフォーマンスが向上する可能性があります。- property_value
スパース行列ハンドル・オブジェクトで設定されているスパース行列のプロパティー。
sparse::property::symmetric行列ハンドル内のデータは対称行列であり、完全なパターンと値が提供されます。
sparse::property::sorted行列ハンドル内のデータは、指定された形式の自然な状態に従ってソートされます。
例#
oneapi::mkl::sparse::set_matrix_property の使用例は、oneMKL インストール・ディレクトリーの以下の場所にあります。
share/doc/mkl/examples/sycl/sparse_blas/source/csr_conjugate_gradient.cpp