Un generador de números aleatorios basado en contador ( CBRNG , también conocido como generador de números pseudoaleatorios basado en contador o CBPRNG) es un tipo de generador de números pseudoaleatorios que utiliza únicamente un contador entero como estado interno. Generalmente se utilizan para generar números pseudoaleatorios para grandes cálculos paralelos.
Fondo
Podemos pensar en un generador de números pseudoaleatorios (PRNG, por sus siglas en inglés) como una función que transforma una serie de bits, conocidos como estado , en un nuevo estado y un número aleatorio.
Es decir, dada una función PRNG y un estado inicialPodemos utilizar repetidamente el generador de números pseudoaleatorios para generar una secuencia de estados y números aleatorios.
En algunos PRNG, como el Mersenne Twister , el estado es grande, más de 2048 bytes. En otros PRNG, como xorshift ,yson uno y lo mismo (y por lo tanto el estado es pequeño, solo 4, 8 o 16 bytes, dependiendo del tamaño de los números que se generan). Pero en ambos casos, y de hecho en la mayoría de los PRNG tradicionales, el estado evoluciona de forma impredecible, por lo que si desea calcular un en particulardado un estado inicial, tienes que calcular,y así sucesivamente, ejecutando el generador de números pseudoaleatorios (PRNG)veces.
Estos algoritmos son inherentemente secuenciales y no se prestan a ejecutarse en máquinas paralelas como CPU multinúcleo y GPU .
En cambio, un generador de números aleatorios basado en contadores (CBRNG) es un PRNG donde el estado "evoluciona" de una manera particularmente simple:De esta forma, puedes generar cada número de forma independiente, sin conocer el resultado de la llamada anterior al generador de números pseudoaleatorios.
Esta propiedad facilita la ejecución de un CBRNG en múltiples hilos de CPU o en una GPU. Por ejemplo, para generarnúmeros aleatorios en una GPU, podría generarhilos y tener elth hilo calcular.
Generadores de números aleatorios biológicos basados en cifrados de bloques
Algunos generadores de números aleatorios basados en códigos (CBRNG) se basan en versiones de menor seguridad de cifrados por bloques . A continuación, explicamos cómo funciona esto.
Al utilizar un cifrado de bloques criptográfico en modo contador , se genera una serie de bloques de bits aleatorios.El bloque se calcula cifrando el númeroutilizando la clave de cifrado:.
Esto es similar a un CBRNG, donde se calcula elel número aleatorio comoDe hecho, cualquier cifrado de bloques puede usarse como un generador de números aleatorios de bloques; simplemente deje que¡
Esto proporciona una fuente de aleatoriedad robusta y criptográficamente segura . Sin embargo, los generadores de números pseudoaleatorios criptográficamente seguros tienden a ser lentos en comparación con los generadores de números pseudoaleatorios inseguros, y en la práctica, muchos usos de los números aleatorios no requieren este grado de seguridad.
En 2011, Salmon et al. de DE Shaw Research presentaron [ 1 ] dos CBRNG basados en versiones de fuerza reducida de cifrados de bloques.
- Threefry utiliza una versión de menor seguridad del cifrado de bloques Threefish . (Los peces jóvenes se conocen como " alevines ").
- ARS utiliza una versión de menor seguridad del cifrado por bloques AES . ("ARS" es un juego de palabras con "AES"; "AES" significa "estándar de cifrado avanzado" y "ARS" significa "sistema de aleatorización avanzado" [ 2 ] ).
ARS se utiliza en versiones recientes de la biblioteca Math Kernel de Intel [ 3 ] y obtiene un buen rendimiento al utilizar instrucciones del conjunto de instrucciones AES-NI , que aceleran específicamente el cifrado AES.
El código que implementa Threefry, ARS y Philox (ver más abajo) está disponible a través de los autores. [ 4 ]
Generadores de números aleatorios de bits basados en la multiplicación
Además de Threefry y ARS, Salmon et al. describieron un tercer PRNG basado en contadores, Philox , [ 1 ] basado en multiplicaciones amplias; por ejemplo, multiplicar dos números de 32 bits y producir un número de 64 bits, o multiplicar dos números de 64 bits y producir un número de 128 bits.
En 2020, Philox era popular en CPU y GPU. En las GPU, la biblioteca cuRAND de nVidia [ 5 ] y TensorFlow [ 6 ] ofrecen implementaciones de Philox. En las CPU, MKL de Intel ofrece una implementación.
Un nuevo CBRNG basado en la multiplicación es el Squares RNG. [ 7 ] Este generador pasa pruebas rigurosas de aleatoriedad [ 8 ] y es considerablemente más rápido que Philox.
Referencias
- 1 2 Salmon, John; Moraes, Mark; Dror, Ron; Shaw, David (2011). "Números aleatorios paralelos: tan fácil como 1, 2, 3". Actas de la Conferencia Internacional de 2011 sobre Computación de Alto Rendimiento, Redes, Almacenamiento y Análisis, Artículo No. 16. doi : 10.1145 /2063384.2063405 .
- ↑ "Random123: Una biblioteca de generadores de números aleatorios basados en contadores" . Consultado el 8 de agosto de 2020 .
- ↑ Fedorov, Gennady; Gladkov, Eugeny (2015). "Nuevos generadores de números aleatorios basados en contadores en la biblioteca Intel® Math Kernel" . Intel . Recuperado el 22 de agosto de 2016 .
- ↑ "Random123" . GitHub .
- ↑ "Descripción general de la API del dispositivo" . Consultado el 8 de agosto de 2020 .
- ↑ "Generación de números aleatorios | TensorFlow Core" .
- ↑ Widynski, Bernard (2020). "Squares: A Fast Counter-Based RNG". arXiv : 2004.06278 [ cs.DS ].
- ↑ L'Ecuyer, Pierre; Nadeau-Chamard, Oliver; Chen, Yi-Fan; Lebar, Justin (2021). "Múltiples flujos con generadores de números aleatorios basados en recurrencia, basados en contador y divisibles". Conferencia de Simulación de Invierno de 2021 (WSC). IEEE, 2021 .
- Generadores de números pseudoaleatorios