Це питання в першу чергу пов'язане з практичною інженерно-технічною проблемою, але мені було б цікаво почути, якби теоретики могли б детальніше зрозуміти її.
Простіше кажучи, у мене є моделювання в Монте-Карло, яке використовує генератор псевдовипадкових чисел, і я хотів би паралелізувати його, щоб паралельно було 1000 комп’ютерів, які виконують одне і те ж моделювання. Тому мені потрібно 1000 незалежних потоків псевдовипадкових чисел.
Чи можемо мати 1000 паралельних потоків із наступними властивостями? Тут повинен бути дуже відомим і широко вивченим PRNG з усілякими приємними теоретичними та емпіричними властивостями.
Потоки є настільки ж хорошими, як і те, що я отримав, якби просто використав і розділив потік, породжений на 1000 потоків.
Генерація наступного числа в будь-якому потоці (майже) так швидко , як генерації наступного номера з .
Інакше кажучи: чи можемо ми отримати кілька незалежних потоків "безкоштовно"?
Звичайно, якби ми просто використовували , завжди відкидаючи 999 чисел і вибираючи 1, ми, безумовно, мали б властивість 1, але ми втратимо час роботи на коефіцієнт 1000.
Проста ідея полягала б у використанні 1000 копій , із насінням 1, 2, ..., 1000. Це, звичайно, було б швидко, але це не очевидно, якщо потоки мають хороші статистичні властивості.
Після деяких гуглів я виявив, наприклад, таке:
SPRNG бібліотека , здається, призначена саме для цієї мети, і вона підтримує декілька PRNGs .
Твістер Mersenne, здається, популярний PRNG в даний час, і я знайшов деякі посилання на варіант, який здатний паралельно виробляти кілька потоків.
Але все це настільки далеко від моїх власних дослідницьких областей, що я не міг зрозуміти, що насправді є найсучаснішим, і які конструкції добре працюють не тільки в теорії, але і на практиці.
Деякі роз’яснення: мені не потрібні якісь криптографічні властивості; це для наукових обчислень. Мені знадобляться мільярди випадкових чисел, щоб ми могли забути будь-який генератор з періодом .
Редагувати: я не можу використовувати справжній RNG; Мені потрібен детермінований PRNG. По-перше, це дуже допомагає при налагодженні і робить все повторюваним. По-друге, це дозволяє мені, наприклад, робити медіану дуже ефективно, використовуючи той факт, що я можу використовувати багатопрохідну модель (див. Це питання ).
Редагувати 2: Існує тісно пов'язане питання @ StackOverflow: Псевдовипадковий генератор чисел для кластерного середовища .