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 |
|
新しく作成されたエンジンに使用される |
mem |
|
エンジンの状態が保存されるメモリー。 |
ファイル・インターフェイスからロード
名前 |
タイプ |
説明 |
|---|---|---|
queue |
|
新しく作成されたエンジンに使用される |
filename |
|
エンジンの状態込まれるファイル名。 |
出力パラメーター#
タイプ |
説明 |
|---|---|
Engine |
指定された |
- 次のコードは、エンジンの状態を
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;