¿Cuál es la latencia y el rendimiento de la instrucción RDRAND en Ivy Bridge?


No puedo encontrar ninguna información sobre agner.org sobre la latencia o rendimiento de la instrucción RDRAND. Sin embargo, este procesador existe, por lo que la información debe estar ahí fuera.

Editar: En realidad, el manual de optimización más reciente menciona esta instrucción. Está documentado como

Author: mbq, 2012-05-07

4 answers

Escribí librdrand. Es un conjunto muy básico de rutinas para usar la instrucción RdRand para llenar buffers con números aleatorios.

Los datos de rendimiento que mostramos en IDF son del software de prueba que escribí que genera una serie de subprocesos utilizando pthreads en Linux. Cada extracción de hilo llena un búfer de memoria con números aleatorios usando RdRand. El programa mide la velocidad media y puede iterar mientras varía el número de subprocesos.

Dado que hay una latencia de comunicaciones de ida y vuelta desde cada núcleo del DRNG compartido y viceversa que es más largo que el tiempo necesario para generar un número aleatorio en el DRNG, el rendimiento promedio obviamente aumenta a medida que agrega subprocesos, hasta que se alcanza el rendimiento máximo. El rendimiento máximo físico del DRNG en IVB es de 800MBytes/s. Un IVB de 4 núcleos con 8 hilos maneja algo del orden de 780Mbytes / s. Con menos hilos y núcleos, se logran números más bajos. El número de 500MB/s es algo conservador, pero cuando estás tratando de hacer tienes que ser honesto.

Dado que el DRNG se ejecuta a una frecuencia fija (800MHz) mientras que las frecuencias del núcleo pueden variar, el número de ciclos de reloj del núcleo por RdRand varía, dependiendo de la frecuencia del núcleo y el número de otros núcleos que acceden simultáneamente al DRNG. Las curvas dadas en la presentación del IDF son una representación realista de lo que se puede esperar. El rendimiento total se ve afectado un poco por la frecuencia del reloj central, pero no mucho. El número de hilos es lo que dominar.

Uno debe tener cuidado al medir el rendimiento de RdRand para realmente 'usar' el resultado de RdRand. Si no lo haces, es decir, tú hiciste esto.. RdRand R6, RdRand R6,....., RdRand R6 repetido muchas veces, el rendimiento se leería como artificialmente alto. Dado que los datos no se usan antes de que se sobrescriban, la tubería de CPU no espera a que los datos regresen del DRNG antes de emitir la siguiente instrucción. Las pruebas que escribimos escriben los datos resultantes en la memoria que estará en caché en el chip, por lo que la tubería se detiene a la espera de los datos. Es por eso que hyperthreading es mucho más efectivo con RdRand que con otros tipos de código.

Los detalles de la plataforma específica, la velocidad del reloj, la versión de Linux y la versión de GCC se dieron en las diapositivas de IDF. No recuerdo los números de la parte superior de mi cabeza. Hay fichas disponibles que son más lentos y fichas disponibles que son más rápidos. El número que dimos para

Los chips están disponibles ahora, por lo que cualquier persona bien versada en el uso de rdtsc puede hacer el mismo tipo de prueba.

 30
Author: David Johnston,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-06-14 23:32:37

Encontrará información relevante en Intel Digital Random Number Generator (DRNG) Software Implementation Guide.

Una cita literal sigue:

Rendimiento medido:

Up to 70 million RDRAND invocations per second
500+ million bytes of random data per second
Throughput ceiling is insensitive to the number of contending parallel threads
 7
Author: Eugene Smith,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-07 12:02:37

Aquí hay algunas cifras de rendimiento que obtengo con rdrand: http://smackerelofopinion.blogspot.co.uk/2012/10/intel-rdrand-instruction-revisited.html

En un Ivybridge i5-3210M (2.5 GHz) (2 núcleos, 4 hilos) obtengo un pico de ~99.6 millones de rdrands de 64 bits por segundo con 4 hilos que equivale a ~6.374 mil millones de bits por segundo.

Un Ivybridge de 8 hilos i7-3770 (3.4 GHz) (4 núcleos, 8 hilos) Llegué a un rendimiento máximo de 99.6 millones de rdrands de 64 bits por segundo en 3 hilo.

 4
Author: Colin King,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-14 17:01:40

He hecho algunas pruebas preliminares de rendimiento en un Ivy Bridge i7-3770 real usando el envoltorio "librdrand" de Intel y genera 33-35 millones de números de 32 bits por segundo en un solo núcleo.

Este número de 70M de Intel es de aproximadamente 8 núcleos; para uno solo reportan alrededor de 10M, por lo que mi prueba es más de 3 veces mejor : - /

 3
Author: mbq,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-06-10 16:21:29