1. 程式人生 > >並行隨機數發生器

並行隨機數發生器

1 TRNG

TRNG 是一個非常靈活的隨機數發生器庫。它允許順序和用於並行應用程式。庫不依賴於任何特定的通訊庫。
它可以使用訊息傳遞介面 (MPI), OpenMP, 以及與 POSIX執行緒或任何其他通訊庫。本節給出了一個關於寫作的簡短教程

並行蒙特卡羅應用與 TRNG 和各種並行程式設計模型, 如MPI 或 OpenMP。

並行隨機數產生方法:分塊方法block splitting method 或者蛙跳方法the leapfrog method。

TRNG 提供兩種強大的技術, 用於並行化的偽隨機數流, 即塊分裂和跳躍leapfrog。哪一個選擇, 高度依賴於結構你的蒙特卡羅演算法和你的需求。

leapfrog方法:

採用split()設定,split可以多次呼叫,產生子子序列。

https://www.numbercrunch.de/trng

windows下編譯完成的32位openmp靜態庫連結:https://download.csdn.net/download/novanova2009/10542654

標頭檔案及必要的原始碼https://download.csdn.net/download/novanova2009/10542665

 

2 RngStream

RngStream連結http://www.iro.umontreal.ca/~lecuyer/myftp/streams00/c++/

它更直觀,易用。RngStream只是一個並行隨機數發生器。週期2^191。可產生2^56長度的子序列。

直接用RngStream g; 然後g.RandU01()即可得到0-1分佈隨機數。

不同程序/執行緒採用區域性物件變數g,可得到該程序/執行緒的隨機數序列。