2013-08-29 4 views
1

CURAND поставляется с массивом генераторов случайных чисел, но я не смог найти никакого сравнения характеристик производительности (и случайности) каждого из них; в основном, меня интересовал бы, какой генератор использовать, для какого приложения получить максимальную производительность. Я был бы рад, если бы кто-то мог быстро описать различия между ними или связать мне ресурс, который делает это.CURAND свойства генераторов

Заранее спасибо.

ответ

2

На этом рисунке показаны характеристики для разных ГСЧ.

Speed of cuRAND RNGs

Для случайности, он должен быть связан только с типом RNG/алгоритмом. Таким образом, вы можете обратиться к документу Intel MKL. В нем есть подробная информация и исследовательские работы. Имена типов как в CURAND, так и в MKL очень похожи.

http://software.intel.com/sites/products/documentation/hpc/mkl/mklman/GUID-3D7D2650-A414-4C95-AF33-BE291BAB2AC3.htm

+0

Ah , ладно, я подумал, что в каких обстоятельствах лучше справляться, какие из них работают лучше. Я вижу, как curandStateMRG32k3a удобен, потому что вам нужно только один на 256 потоков, я думал, что у других были подобные свойства. –

1

Первое отличие заключается в эффективности. XORWOW является генератором по умолчанию, но не всегда является наиболее эффективным. Например, Philox быстрее генерирует нормально распределенные поплавки.

cuRAND

Другим отличием является то, что на практике Вы можете создать более одного поплавка с каждым вызовом с некоторыми генераторами. Например, с помощью Philox Вы можете генерировать даже 4 поплавки, нормально или равномерно распределенные с каждым вызовом, тогда как с помощью XORWOW вы можете генерировать максимум два поплавка, которые обычно или равномерно распределены.

__device__ float4 
curand_normal4 (curandStatePhilox4_32_10_t *state) 

Следующая разница в период псевдослучайной последовательности (Всего пространства состояний PRNG до того вы начинаете видеть повторы). Xorwow имеет период около 2^190 (с состоянием, установленным после 2^67 для одного и того же семени) *. Для Филокса подпоследовательность и смещение вместе определяют смещение в последовательности с периодом 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 являются псевдослучайными генераторами, в то время как оба Sobols являются квазирановыми генераторами.

* При вызове curand_init с семенем, он шифрует это семя, а затем пропускает вперед 2^67 числа (это своего рода дорогой, но имеет некоторые полезные свойства)

источники: https://developer.nvidia.com/cuRAND http://cs.brown.edu/courses/cs195v/lecture/week11.pdf

Смежные вопросы