Descarga de Ice Lake AVX-512

imagen


Esta es una breve publicación sobre un estudio del comportamiento de AVX2 y AVX-512 en relación con la descarga con licencia de nuevos chips Intel Ice Lake.



La descarga con licencia 1 es un efecto poco conocido en el que los límites de frecuencia caen por debajo del nominal cuando se ejecutan ciertas instrucciones SIMD, especialmente instrucciones de punto flotante pesado o instrucciones con un ancho de 512 bits.



Puede leer más sobre este tipo de descarga en esta respuesta en StackOverflow , y ya hemos explicado la mecánica de bajo nivel de tales transiciones con cierto detalle . También puedes encontrar instruccionescómo aprovechar los SIMD amplios (Single Instruction Multiple Data: un tipo o extensión de la arquitectura del conjunto de instrucciones, por ejemplo, Intel AVX o ARM NEON, capaz de realizar múltiples operaciones idénticas en elementos empaquetados en un registro SIMD) con este problema en mente 2 .



La información de los enlaces está escrita en el contexto de Skylake-SP (SKX, arquitectura de servidor Intel Skylake que incluye Skylake-SP, Skylake-X y Skylake-W), que fueron la primera generación de chips compatibles con AVX-512.



¿Cuál es la situación con Ice Lake, con los chips más nuevos que admiten tanto las instrucciones AVX-512 de SKX como el nuevo conjunto de instrucciones AVX-512 ? ¿Tendremos que mirar estas nuevas instrucciones desde lejos y nunca podremos usarlas debido a la descarga?



Lea el artículo para averiguarlo o simplemente pase a la sección Resumen.



AVX-Turbo



Usaremos la utilidad avx-turbo para medir la dependencia de la frecuencia del número de núcleos y el conjunto de instrucciones. Esta herramienta funciona de manera simple: ejecuta un conjunto de instrucciones en un número determinado de núcleos, midiendo la frecuencia alcanzada durante la prueba.



Por ejemplo, un punto de referencia avx256_fma_tque mide el costo de instrucciones pesadas de 256 bits con alto ILP (paralelismo a nivel de instrucción: la cantidad de paralelismo en el nivel entre instrucciones de un procesador superescalar) ejecuta la siguiente secuencia FMA:



	vfmadd132pd ymm0,ymm10,ymm11
	vfmadd132pd ymm1,ymm10,ymm11
	vfmadd132pd ymm2,ymm10,ymm11
	vfmadd132pd ymm3,ymm10,ymm11
	vfmadd132pd ymm4,ymm10,ymm11
	vfmadd132pd ymm5,ymm10,ymm11
	vfmadd132pd ymm6,ymm10,ymm11
	vfmadd132pd ymm7,ymm10,ymm11
	vfmadd132pd ymm8,ymm10,ymm11
	vfmadd132pd ymm9,ymm10,ymm11
	; repeat 10x for a total of 100 FMAs


En total, utilizamos cinco pruebas para probar cada combinación de instrucciones ligeras y pesadas de 256 bits y 512 bits, así como instrucciones escalares (SIMD de 128 bits se comporta igual que las instrucciones escalares) escribiendo en la línea de comando:



./avx-turbo --test=scalar_iadd,avx256_iadd,avx512_iadd,avx256_fma_t,avx512_fma_t


Resultados de Ice Lake



Ejecuté avx-turbo como se describió anteriormente en un Ice Lake i5-1035G4, un procesador cliente de Ice Lake de rango medio que funciona a hasta 3.7 GHz. Los resultados completos están ocultos en la esencia , pero aquí presento los resultados más importantes para las frecuencias obtenidas (todos los valores están en GHz):



Conjunto de instrucciones Núcleos activos
1 2 3 4
Escalar / 128 bits 3,7 3.6 3.3 3.3
Ligero de 256 bits 3,7 3.6 3.3 3.3
Pesado 256 bits 3,7 3.6 3.3 3.3
Ligero de 512 bits 3.6 3.6 3.3 3.3
Pesado de 512 bits 3.6 3.6 3.3 3.3


Como se esperaba, la caída máxima en la frecuencia ocurre a medida que aumenta el número de núcleos activos, pero mire hacia abajo en cada columna para ver el impacto en las categorías de instrucción. ¡Casi no se produce ninguna descarga a lo largo de este eje! Con solo un núcleo activo, hay una disminución con instrucciones amplias, y solo por unos miserables 100 MHz: de 3700 MHz a 3600 MHz usando cualquier instrucción de 512 bits.



En todos los demás casos, incluso con varios núcleos activos, así como núcleos pesados ​​de 256 bits, la descarga con licencia es cero : todo funciona tan rápido como con instrucciones escalares.



Tipos de licencias



Aquí hay otro cambio. La arquitectura SKX tiene tres licencias o categorías de instrucciones de descarga: L0, L1 y L2. Aquí, en el cliente ICL, solo hay dos de ellos, 3, y corresponden incorrectamente a las tres categorías en SKX.



Las licencias en SKX corresponden al ancho y peso de las instrucciones de la siguiente manera:



Anchura Livianos Pesado
Escalar / 128 L0 L0
256 L0 L1
512 L1 L2


En particular, tenga en cuenta que las instrucciones pesadas de 256 bits tienen la misma licencia que las instrucciones ligeras de 512 bits.



En las ICL de cliente, el esquema es el siguiente:



Anchura Livianos Pesado
Escalar / 128 L0 L0
256 L0 L0
512 L1 L1


Aquí las instrucciones pesadas de 256 bits y las ligeras de 512 bits se encuentran en diferentes categorías. De hecho, el concepto de instrucciones ligeras versus pesadas no parece aplicarse aquí: la categorización depende completamente del ancho 4 .



¿Y qué?



¿Y qué hay de esto?



Como mínimo, esto significa que debemos cambiar nuestro modelo mental del costo de las instrucciones AVX-512 en relación con las frecuencias. En lugar de decir que "generalmente causan una descarga significativa", se puede decir que este chip de Ice Lake tiene AVX-512 que causa poca o ninguna descarga con licencia, y supongo que esto también es cierto para otros chips de cliente de Ice Lake.



Sin embargo, este cambio en nuestras expectativas tiene un defecto importante: la descarga con licencia no es la únicafuente de descarga. También podemos encontrar limitaciones de energía, calor o corriente. Algunas configuraciones solo pueden ejecutar instrucciones SIMD amplias en todos los núcleos durante un tiempo breve y luego exceder los límites de potencia operativa. En mi caso, la computadora portátil de $ 250 que estaba probando estaba extremadamente mal enfriada, y en lugar de limitaciones de energía, me encontré con un límite de disipación de calor (100 ° C) solo segundos después de ejecutar instrucciones pesadas en todos los núcleos.



Sin embargo, estas otras restricciones son cualitativamente diferentes de las restricciones de licencia. Básicamente , limitan a 5 en función del pago por lo que usa: Si usa instrucciones amplias o pesadas (o ambas), solo causa un aumento microscópico en la generación de energía o calor asociado con estas instrucciones solamente. Esto es diferente a algunos efectos de licencia en los que los cambios de frecuencia ocurren dentro de un núcleo o chip completo, afectando significativamente la ejecución posterior no relacionada con este tipo de instrucciones.



Dado que las operaciones amplias suelen consumir menos energía que un número similar de operaciones estrechas 6 , queda inmediatamente claro si las operaciones amplias valen la pena ; al menos en los casos que escalan bien al aumentar el ancho. Sea como fuere, este problema es mayoritariamente local: no depende del comportamiento del código vecino.



Salir



Aquí están mis conclusiones.



  • El procesador Ice Lake i5-1035 demuestra solo una descarga con licencia de 100 MHz con un núcleo activo al ejecutar instrucciones de 512 bits.
  • En todos los demás casos, no hay descarga.
  • La frecuencia turbo de ejecución de instrucciones de 512 bits en todos los núcleos es de 3.3 GHz, que es el 89% de la frecuencia máxima de ejecución de operaciones escalares en un núcleo (3.7 GHz), por lo tanto, dentro de los límites de potencia y disipación de calor, este chip tiene una frecuencia muy “plana”. adiccion.
  • A diferencia de la arquitectura SKX, este chip de Ice Lake no utiliza la división en

    instrucciones "ligeras" y "pesadas" para escalar frecuencias: las operaciones FMA se realizan de la misma manera que las operaciones más ligeras.


Es decir, no hay necesidad de tener miedo de descargar ICL de clientes. Solo el futuro nos dirá si esto también se aplica a las ICL del lado del servidor.



Discusiones y comunicación



Esta publicación se puede discutir en Hacker News .



Si tiene preguntas u otros comentarios, puede dejar un comentario en la publicación original . También me interesarían los resultados en otros chips ICL, por ejemplo en las versiones i3 e i7: avíseme si los tiene y podremos obtener los resultados.






Notas



  1. Ya estoy cansado de repetir constantemente la descarga con licencia , por lo que a menudo solo usaré el término "descarga", pero debe quedar claro que esta es una versión con licencia y no otros tipos de aceleración de frecuencia.
  2. Tenga en cuenta que Daniel escribió acerca de este mucho más largo , de una sola vez.

  3. : , - ( ) , , .
  4. , , ICL FMA : 512- . , 256- : - 2x256- FMA , , 1x512- FMA . , , 512- .
  5. , , , , , . , , , vzeroupper vzeroall.
  6. Por ejemplo, una suma de números enteros de 512 bits generalmente requerirá menos energía que las dos operaciones de 256 bits requeridas para calcular el mismo resultado, porque la sobrecarga en la ejecución crece de manera no lineal al aumentar el ancho (incluyen casi todo excepto la ejecución en sí).



All Articles