oneapi::mkl::sparse::release_matrix_handle#

oneapi::mkl::sparse::matrix_handle_t オブジェクト内の内部データとハンドル自体を解放します。

説明#

oneapi::mkl::sparse::release_matrix_handle ルーチンは、oneapi::mkl::sparse::matrix_handle_t オブジェクトが保持するすべての内部データを解放します (依存関係が完了するまで待機します)。その後、オブジェクト自体を解放します。

oneMKL 2023.2 以降の場合: matrix_handle_t オブジェクトのアドレスが渡されますが (matrix_handle_t *p_spMat)、逆参照され (matrix_handle_t handle = *p_spMat;)、同期的に null に更新され、その後、handle は非同期にスケジュールされた破棄ルーチンに渡されるため、非同期破棄が安全であることが保証されます。

以前のリリースでは、逆参照は非同期的に発生していたため、p_spMat がスタック変数 (&handle など) であり、非同期実行 (逆参照を含む) が開始する前にスコープ外になると、セグメンテーション・エラーが発生する場合がありました。

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

推奨される使用モデルは次のとおりです

using namespace oneapi::mkl; 

// 初期化のために init_matrix_handle に送信する前に、 
// 新しく作成されたハンドルを nullptr に設定します 

sparse::matrix_handle_t spMat = nullptr; 
sparse::init_matrix_handle(&spMat); 

// ハンドルは初期化され、入力して使用できるようになりました 

sparse::set_csr_data(queue, spMat, /* 行列のサイズと配列 */); 

// 終わったらハンドルをクリーンアップします 
sycl::event ev_release = sparse::release_matrix_handle(queue, &spMat, dependencies); 
ev_release.wait(); // ブロックするか、イベントを他に渡すか

API#

構文#

namespace oneapi::mkl::sparse { 

    sycl::event release_matrix_handle ( 
        sycl::queue & queue, 
        oneapi::mkl::sparse::matrix_handle_t *p_spMat, 
        const std::vector<sycl::event> &dependencies = {}); 

    // 2023.0 で非推奨 
    [[deprecated("Use oneapi::mkl::sparse::release_matrix_handle(queue, p_spMat, dependencies) instead.")]] 
    void release_matrix_handle ( 
        oneapi::mkl::sparse::matrix_handle_t *p_spMat, 
        const std::vector<sycl::event> &dependencies ={}); 
}

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

  • oneapi/mkl/spblas.hpp

入力パラメーター#

queue

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

p_spMat

解放されるオブジェクトへの sparse::matrix_handle_t ハンドルのアドレス。スパース行列とその他の内部データが含まれており、oneapi::mkl::sparse::init_matrix_handle ルーチンで初期化され、oneapi::mkl::sparse::set_<sparse_matrix_type>_data ルーチンのいずれかを使用してユーザーデータを設定します。oneapi::mkl::sparse::optimize_xyz ルーチンは、呼び出しで解放される内部割り当てデータも保持している可能性があります。

<sparse_matrix_type> でサポートされているケースは、CPU と GPU デバイスの両方で csrcoo です。

dependencies

行列ハンドルを解放する前に handle が依存するすべてのイベントのリストを含む、const std::vector<sycl::event> タイプのベクトル。

出力パラメーター#

p_spMat

sparse::matrix_handle_tsparse::matrix_handle_t ハンドルのアドレスは、null オブジェクトを指すように更新がスケジュールされ、渡されたハンドルは割り当ての解除とクリーンアップを行うためスケジュールされます。

戻り値#

sycl::event

割り当て解除クリーンアップ・ルーチンの完了を待機したり、依存関係として追加できる SYCL* イベント。

戻り値 (非推奨バージョン)#

非推奨バージョンでは、sycl::event は返されず、API はブロックされます。