Для генерации совершенно независимых случайных чисел вам необходимо использовать параллельный генератор случайных чисел. По сути, вы выбираете одно начальное число, и оно генерирует M независимых потоков случайных чисел. Таким образом, на каждом из M графических процессоров вы можете генерировать случайные числа из независимых потоков.
При работе с несколькими графическими процессорами вы должны знать, что вы хотите:
- независимых потоков в графических процессорах (если RN генерируются каждым графическим процессором)
- независимые потоки между графическими процессорами.
Оказывается, что генерировать случайные числа на каждом ядре графического процессора сложно (см. этот вопрос Я задал некоторое время назад). Когда я играю с GPU и RN, вы получаете ускоренную генерацию случайных чисел на GPU, только если генерируете большие числа одновременно.
Вместо этого я бы генерировал случайные числа на процессоре, так как:
- Проще и иногда быстрее генерировать их на ЦП и передавать по ним.
- Вы можете использовать хорошо протестированные параллельные генераторы случайных чисел
- Типы готовых генераторов случайных чисел, доступных для графических процессоров, очень ограничены.
- Текущие библиотеки случайных чисел на GPU генерируют RN только из небольшого числа распределений.
Чтобы ответить на ваш вопрос в комментариях: От чего зависят случайные числа?
Очень простым генератором случайных чисел является линейный конгруэнтный генератор . Хотя этот генератор был превзойден более новыми методами, он должен дать вам представление о том, как они работают. В основном, i-е случайное число зависит от (i-1) случайного числа. Как вы указали, если вы выполняете два потока достаточно долго, они будут перекрываться. Большая проблема в том, что вы не знаете, когда они будут пересекаться.