Генератор случайных чисел на основе счетчика
( Генерация случайных чисел на основе счетчика CBRNG , также известная как генератор псевдослучайных чисел на основе счетчика или CBPRNG) — это своего рода генератор псевдослучайных чисел , который использует только целочисленный счетчик в качестве своего внутреннего состояния. Обычно они используются для генерации псевдослучайных чисел для больших параллельных вычислений.
Фон
[ редактировать ]Мы можем думать о генераторе псевдослучайных чисел (PRNG) как о функции, которая преобразует серию битов, известных как состояние, в новое состояние и случайное число.
То есть, учитывая функцию PRNG и начальное состояние мы можем неоднократно использовать ГПСЧ для генерации последовательности состояний и случайных чисел.
В некоторых ГПСЧ, таких как Mersenne Twister , состояние большое, более 2048 байт. В других PRNG, таких как xorshift , и являются одним и тем же (и поэтому состояние небольшое, всего 4, 8 или 16 байт, в зависимости от размера генерируемых чисел). Но в обоих случаях, как и в большинстве традиционных ГПСЧ, состояние развивается непредсказуемо, поэтому если вы хотите вычислить конкретное учитывая начальное состояние , вам нужно посчитать , и т. д., запуская PRNG раз.
Такие алгоритмы по своей сути являются последовательными и не могут работать на параллельных машинах, таких как многоядерные процессоры и графические процессоры .
Напротив, генератор случайных чисел на основе счетчика (CBRNG) представляет собой PRNG, в котором состояние «развивается» особенно простым образом: . Таким образом, вы можете генерировать каждое число независимо, не зная результата предыдущего вызова PRNG.
Это свойство позволяет легко запускать CBRNG на нескольких потоках ЦП или графическом процессоре. Например, для генерации случайные числа на графическом процессоре, вы можете создать темы и иметь этот поток вычислить .
CBRNG на основе блочных шифров
[ редактировать ]Некоторые CBRNG основаны на версиях блочных шифров пониженной стойкости . Ниже мы объясним, как это работает.
При использовании криптографического блочного шифра в режиме счетчика вы генерируете серию блоков случайных битов. -й блок рассчитывается путем шифрования числа используя ключ шифрования : .
Это похоже на CBRNG, где вы рассчитываете случайное число как . Действительно, любой блочный шифр может использоваться в качестве CBRNG; просто позвольте !
Это дает надежный, криптографически безопасный источник случайности . Но криптографически безопасные генераторы псевдослучайных чисел, как правило, работают медленнее по сравнению с небезопасными ГПСЧ, и на практике многие варианты использования случайных чисел не требуют такой степени безопасности.
В 2011 году Салмон и др. в DE Shaw Research представили [ 1 ] два CBRNG, основанные на версиях блочных шифров пониженной стойкости.
- Threefry использует уменьшенную версию блочного шифра Threefish . (Молодь рыбы известна как « мальки ».)
- ARS использует версию блочного шифра AES с пониженной стойкостью . («ARS» — это игра слов от «AES»; «AES» означает «расширенный стандарт шифрования», а «ARS» означает «расширенная система рандомизации»). [ 2 ] ).
ARS используется в последних версиях библиотеки Intel Math Kernel Library. [ 3 ] и обеспечивает хорошую производительность за счет использования инструкций из набора инструкций AES-NI , которые специально ускоряют шифрование AES.
Код, реализующий Threefry, ARS и Philox (см. ниже), доступен у авторов. [ 4 ]
CBRNG на основе умножения
[ редактировать ]Помимо Threefry и ARS, Salmon et al. описал третий ГПСЧ на основе счетчиков, Philox , [ 1 ] на основе широких множителей; например, умножение двух 32-битных чисел и получение 64-битного числа или умножение двух 64-битных чисел и получение 128-битного числа.
По состоянию на 2020 год Philox популярен среди процессоров и графических процессоров. На графических процессорах — nVidia . библиотека cuRAND от [ 5 ] и ТензорФлоу [ 6 ] предоставить реализации Philox. Intel MKL На процессорах реализацию обеспечивает .
Новым CBRNG, основанным на умножении, является ГСЧ квадратов. [ 7 ] Этот генератор проходит строгие тесты на случайность. [ 8 ] и значительно быстрее, чем Philox.
Ссылки
[ редактировать ]- ^ Jump up to: а б Лосось, Джон; Мораес, Марк; Дрор, Рон; Шоу, Дэвид (2011). «Параллельные случайные числа: просто, как 1, 2, 3». Материалы Международной конференции по высокопроизводительным вычислениям, сетям, хранению и анализу 2011 г., статья № 16 . дои : 10.1145/2063384.2063405 .
- ^ «Random123: Библиотека генераторов случайных чисел на основе счетчиков» . Проверено 8 августа 2020 г.
- ^ Федоров Геннадий; Гладков, Евгений (2015). «Новые генераторы случайных чисел на основе счетчиков в библиотеке ядра Intel® Math» . Интел . Проверено 22 августа 2016 г.
- ^ «Случайный123» .
- ^ «Обзор API устройства» . Проверено 8 августа 2020 г.
- ^ «Генерация случайных чисел | TensorFlow Core» .
- ^ Видынски, Бернар (2020). «Квадраты: быстрый встречный ГСЧ». arXiv : 2004.06278 [ cs.DS ].
- ^ Л'Экуйер, Пьер; Надо-Шамар, Оливер; Чен, И-Фан; Лебар, Джастин (2021). «Несколько потоков с генераторами случайных чисел на основе повторения, счетчиков и разделяемыми генераторами случайных чисел». Зимняя конференция по моделированию 2021 (WSC). ИИЭР, 2021 .