並行隨機數發生器
阿新 • • 發佈:2018-11-24
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,可得到該程序/執行緒的隨機數序列。