CURAND帶有一個隨機數發生器陣列,但是我沒有找到它們每個的性能(和隨機性)屬性的任何比較;大多數情況下,我會對哪個應用程序使用哪個生成器以獲得最佳性能感興趣。如果有人能夠快速勾畫出他們之間的差異,或者聯繫我這樣做的資源,我會很高興。發電機的CURAND屬性
在此先感謝。
CURAND帶有一個隨機數發生器陣列,但是我沒有找到它們每個的性能(和隨機性)屬性的任何比較;大多數情況下,我會對哪個應用程序使用哪個生成器以獲得最佳性能感興趣。如果有人能夠快速勾畫出他們之間的差異,或者聯繫我這樣做的資源,我會很高興。發電機的CURAND屬性
在此先感謝。
此圖顯示了不同的RNG的性能。
隨機性,應只涉及到RNG型/算法。所以你可以參考英特爾MKL文檔。裏面有詳細的信息和研究論文。 CURAND和MKL中的類型名稱非常相似。
首先差效率。 XORWOW是默認生成器,但並不總是最有效。例如,Philox生成正態分佈的浮點數更快。
另一個不同之處是,在實踐中可以產生一個以上的浮動與一些發電機每次調用。 例如,使用Philox您可以在每次調用時生成正常或均勻分佈的4個浮點數,而使用XORWOW時,可以生成正常或均勻分佈的最多兩個浮點數。
__device__ float4
curand_normal4 (curandStatePhilox4_32_10_t *state)
接下來的區別是( 你開始看到重複之前的PRNG的總狀態空間)的僞隨機序列的週期。 Xorwow的週期約爲2^190(同一個種子在2^67之後建立的狀態)*。對於Philox,子序列和偏移量一起定義了一個序列中的偏移量,其中的週期爲2^128。 請注意,如果您使用相同的種子運行數百萬個線程您可能會耗盡每個線程的狀態空間並開始看到重複。 ((2^190)/(10^6))/(2^67)= 1.0633824×10^31
還有一個區別是各州的大小。對於Xorwow sizeof(curandState_t)是48個字節,sizeof(curandStatePhilox4_32_10_t)是64個字節。當您運行數百萬個線程時(每個線程都有自己的curand狀態),您可能會用盡設備內存。每百萬線程1024^2 * 64〜= 64兆字節。 XORWOW,Philox,MRR32k3a,MTGP32是僞隨機生成器,而兩個Sobol都是準Ranom生成器。
*當使用種子調用curand_init,它打亂那個種子,然後跳過提前2^67號(這是一種昂貴的,但有一些不錯的屬性)
來源: https://developer.nvidia.com/cuRAND http://cs.brown.edu/courses/cs195v/lecture/week11.pdf
啊好吧,我認爲還有更多的是在什麼情況下他們表現更好。我可以看到curandStateMRG32k3a是如何方便的,因爲您只需要每256個線程一個,我認爲其他人有類似的屬性。 –