load_state#

指定されたメモリーバッファーまたはファイルから乱数エンジンの状態を読み込み、新しいエンジン・オブジェクトを作成します。

説明#

load_state 関数を使用すると、メモリーバッファーまたはファイルに書き込まれた別のエンジンのバイナリー状態から新しい乱数エンジン・オブジェクトを作成できます。新しいエンジンには異なる sycl::queue オブジェクトを使用できます。

API#

構文#

メモリー・インターフェイスからロード

namespace oneapi::mkl::rng { 
  template<typename Engine> 
  Engine load_state (const sycl::queue& queue, 
                     const std::uint8_t* mem); 
}

ファイル・インターフェイスからロード

namespace oneapi::mkl::rng { 
  template<typename Engine> 
  Engine load_state (const sycl::queue& queue, 
                     const std::string& filename); // 2024.1 リリース以降は非推奨 
}

> : ファイルからロード機能は非推奨です。代わりにメモリーからロード機能を使用してください。

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

  • oneapi/mkl/rng.hpp

入力パラメーター#

メモリー・インターフェイスからロード

名前

タイプ

説明

queue

const sycl::queue& queue

新しく作成されたエンジンに使用される sycl::queue オブジェクト。

mem

const std::uint8_t*

エンジンの状態が保存されるメモリー。

ファイル・インターフェイスからロード

名前

タイプ

説明

queue

const sycl::queue& queue

新しく作成されたエンジンに使用される sycl::queue オブジェクト。

filename

const std::string&

エンジンの状態込まれるファイル名。

出力パラメーター#

タイプ

説明

Engine

指定された sycl::queueとロードされたエンジンの状態から作成される新しい乱数エンジン・オブジェクト。

次のコードは、エンジンの状態を

engine_state.dat ファイルに保存し、それを再度読み込む方法を示しています。

状態の保存/読み込み機能のコード#

1  // GPU エンジンの作成 
2  oneapi::mkl::rng::default_engine engine(gpu_queue); 
3 
4  // 保存に必要なメモリー容量を確認 
5  auto mem_size = oneapi::mkl::rng::get_state_size(engine); 
6 
7  // メモリーバッファーの割り当て 
8  std::uint8_t* mem_buf = new std::uint8_t[mem_size]; 
9 
10 // エンジンの状態をファイルに保存 
11 oneapi::mkl::rng::save_state(engine, mem_buf); 
12 
13 // GPU エンジンから乱数を生成 
14 oneapi::mkl::rng::generate(oneapi::mkl::rng::uniform{}, engine, n, r1); 
15 
16 // CPU キューの状態を読み込み 
17 auto engine_2 = oneapi::mkl::rng::load_state<oneapi::mkl::rng::default_engine>(cpu_queue, mem_buf); 
18 
19 // CPU エンジンから乱数を生成 
20 oneapi::mkl::rng::generate(oneapi::mkl::rng::uniform{}, engine_2, n, r2); 
21 
22 // メモリーバッファーのクリーンアップ 
23 delete[] mem_buf;