oneapi::mkl::sparse::omatcopy#

スパース行列の形式を変更せずに、行列ハンドル内のユーザーデータを新しいハンドル内のユーザーデータにアウトオブプレースでコピー/転置します。

説明#

oneapi::mkl::sparse::omatcopy API は、特定のスパース行列ハンドルに格納されているユーザー指定のスパース行列配列を、別のスパース行列ハンドルの配列にコピーします。このルーチンを使用すると、ユーザーはコピー内で転置操作や配列インデックスを変更できます。この API では、アウトオブプレースのコピー/転置のみがサポートされます。

スローされる例外の詳細は、エラー処理を参照してください。

このルーチンは、行列ハンドル作成ルーチン oneapi::mkl::sparse::set_<sparse_matrix_type>_data を通じて oneMKL に提供される配列を操作します。出力行列ハンドルの配列のみが変更され、入力ハンドルの配列は変更されません。

API#

構文#

USM および SYCL* バッファーを使用:

namespace oneapi::mkl::sparse { 
    sycl::event omatcopy ( 
        sycl::queue &queue, 
        oneapi::mkl::transpose transpose_val, 
        oneapi::mkl::sparse::matrix_handle_t spMat_in, 
        oneapi::mkl::sparse::matrix_handle_t spMat_out, 
        const std::vector<sycl::event> &dependencies = {}); 
}

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

  • oneapi/mkl/spblas.hpp

入力パラメーター#

queue

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

transpose_val

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

oneapi::mkl::transpose::nontrans
  • 非転置、 op(A) = A

oneapi::mkl::transpose::trans
  • 転置、op(A) = AT

oneapi::mkl::transpose::conjtrans
  • 共役転置、op(A) = AH

spMat_in

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

<sparse_matrix_type> でサポートされているケースは、CPU と GPU デバイスの両方で csrcoo です。spMat_out は同じ <sparse_matrix_type> で作成する必要があります。

spMat_out

出力スパース行列およびその他の内部データを含むオブジェクトへのハンドル。oneapi::mkl::sparse::set_<sparse_matrix_type>_data ルーチンの 1 つを使用して作成されます。oneapi::mkl::transpose::nontrans 操作の場合、この出力ハンドルのスパース行列の次元/配列の長さは入力ハンドルと同じである必要があることに注意してください。oneapi::mkl::transpose::trans および oneapi::mkl::transpose::conjtrans 操作の出力行列ハンドルの行数と列数は、入力行列ハンドルの列数と行数と同じである必要があります。また、転置演算の場合、スパース行列内の非ゼロの数は変更されません。

<sparse_matrix_type> でサポートされているケースは、CPU と GPU デバイスの両方で csrcoo です。spMat_in は同じ <sparse_matrix_type> で作成する必要があります。

dependencies

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

戻り値#

sycl::event

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

// API 引数と使用例 
sycl::event ev_opt = sparse::omatcopy(queue, trans_val, spMat_in, spMat_out);                // USM で許可 
sycl::event ev_opt = sparse::omatcopy(queue, trans_val, spMat_in, spMat_out, {});            // USM で許可 
sycl::event ev_opt = sparse::omatcopy(queue, trans_val, spMat_in, spMat_out, dependencies);  // USM で許可 
sparse::omatcopy(queue, trans_val, spMat_in, spMat_out);                                     // sycl::buffer で推奨 
sparse::omatcopy(queue, trans_val, spMat_in, spMat_out, {});                                 // sycl::buffer の場合は推奨されませんが、サポートされています。 
sparse::omatcopy(queue, trans_val, spMat_in, spMat_out, dependencies);                       // sycl::buffer の場合は推奨されませんが、サポートされています。 
sycl::event ev_opt = sparse::omatcopy(queue, trans_val, spMat_in, spMat_out);                // sycl::buffer の場合は推奨されませんが、サポートされています。ほとんどの sycl::buffer oneMKL API には依存関係を渡す機能がないことに注意してください。