Первое отличие заключается в эффективности. XORWOW является генератором по умолчанию, но не всегда является наиболее эффективным. Например, Philox быстрее генерирует нормально распределенные поплавки.
Другим отличием является то, что на практике Вы можете создать более одного поплавка с каждым вызовом с некоторыми генераторами. Например, с помощью 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
Ah , ладно, я подумал, что в каких обстоятельствах лучше справляться, какие из них работают лучше. Я вижу, как curandStateMRG32k3a удобен, потому что вам нужно только один на 256 потоков, я думал, что у других были подобные свойства. –