Saltar al contenido

FLOPS por ciclo para sandy-bridge y haswell SSE2 / AVX / AVX2

Contamos con el arreglo a esta interrogante, al menos eso pensamos. Si sigues con interrogantes dínoslo y con placer te responderemos

Solución:

Aquí están los recuentos teóricos máximos de FLOP (por núcleo) para una serie de microarquitecturas de procesadores recientes y una explicación de cómo lograrlas.

En general, para calcular esto, busque el rendimiento de las instrucciones FMA, por ejemplo, en https://agner.org/optimize/ o cualquier otro resultado de microbenchmark, y multiplique
(FMAs per clock) * (vector elements / instruction) * 2 (FLOPs / FMA).
Tenga en cuenta que lograr esto en código real requiere un ajuste muy cuidadoso (como el desenrollado de bucles) y fallas de caché casi nulas, y sin cuellos de botella en nada demás. Las CPU modernas tienen un rendimiento FMA tan alto que no hay mucho espacio para otras instrucciones para almacenar los resultados o para alimentarlos con entrada. Por ejemplo, 2 cargas SIMD por reloj es también el límite para la mayoría de las CPU x86, por lo que un producto punto producirá un cuello de botella en 2 cargas por 1 FMA. Sin embargo, una multiplicación de matriz densa cuidadosamente ajustada puede acercarse a lograr estos números.

Si su carga de trabajo incluye cualquier ADD / SUB o MUL que no se puede contratar en FMA, los números máximos teóricos no son un objetivo apropiado para su carga de trabajo. Haswell / Broadwell tienen 2 por reloj SIMD FP multiplicado (en las unidades FMA), pero solo 1 por reloj SIMD FP agrega (en una unidad de agregación FP vectorial separada con menor latencia). Skylake eliminó el sumador FP de SIMD separado, ejecutando add / mul / fma de la misma manera con una latencia de 4c, un rendimiento de 2 por reloj, para cualquier ancho de vector.

Intel

Tenga en cuenta que las versiones Celeron / Pentium de microarquitecturas recientes no admiten instrucciones AVX o FMA, solo SSE4.2.

Intel Core 2 y Nehalem (SSE / SSE2):

  • 4 DP FLOP / ciclo: suma SSE2 de 2 anchos + multiplicación SSE2 de 2 anchos
  • 8 SP FLOP / ciclo: suma SSE de 4 anchos + multiplicación SSE de 4 anchos

Intel Sandy Bridge / Ivy Bridge (AVX1):

  • 8 DP FLOP / ciclo: suma de AVX de 4 anchos + multiplicación de AVX de 4 anchos
  • 16 SP FLOP / ciclo: suma de AVX de 8 anchos + multiplicación de AVX de 8 anchos

Intel Haswell / Broadwell / Skylake / Kaby Lake / Café / … (AVX + FMA3):

  • 16 DP FLOP / ciclo: dos instrucciones FMA de 4 anchos (fusionado y suma múltiple)
  • 32 SP FLOP / ciclo: dos instrucciones FMA de 8 anchos (fusionado multiplicar-agregar)
  • (El uso de instrucciones vectoriales de 256 bits puede reducir la velocidad máxima de reloj turbo en algunas CPU).

Intel Skylake-X / Skylake-EP / Cascade Lake / etc (AVX512F) con 1 unidades FMA: algo de Xeon Bronze / Silver

  • 16 DP FLOP / ciclo: una instrucción FMA de 8 anchos (combinación de multiplicación-suma)
  • 32 SP FLOP / ciclo: una instrucción FMA de 16 anchos (combinación de multiplicación-suma)
  • El mismo rendimiento de cómputo que con instrucciones más estrechas de 256 bits, pero las aceleraciones aún pueden ser posibles con AVX512 para cargas / almacenes más amplios, algunas operaciones vectoriales que no se ejecutan en las unidades FMA como operaciones bit a bit y barajas más amplias.
  • (Tener instrucciones vectoriales de 512 bits en vuelo apaga el vector ALU en el puerto 1. También reduce la velocidad máxima del reloj turbo, por lo que los “ciclos” no son una constante en sus cálculos de rendimiento).

Intel Skylake-X / Skylake-EP / Cascade Lake / etc (AVX512F) con 2 unidades FMA: Chips de escritorio de gama alta (HEDT) Xeon Gold / Platinum e i7 / i9.

  • 32 DP FLOP / ciclo: dos instrucciones FMA de 8 anchos (fusionado y suma múltiple)
  • 64 SP FLOP / ciclo: dos instrucciones FMA de 16 anchos (fusionado multiplicar-agregar)
  • (Tener instrucciones vectoriales de 512 bits en vuelo apaga el vector ALU en el puerto 1. También reduce la velocidad máxima del reloj turbo).

Futuro: Se espera que Intel Cooper Lake (sucesor de Cascade Lake) introduzca Brain Float, un formato float16 para cargas de trabajo de redes neuronales, con soporte para el cálculo SIMD real en él, a diferencia de la extensión F16C actual que solo tiene soporte para carga / almacenamiento con conversión a float32. Esto debería duplicar el rendimiento de FLOP / ciclo frente a precisión simple en el mismo hardware.

Los chips Intel actuales solo tienen cómputo real directamente en el float16 estándar en la iGPU.


AMD

AMD K10:

  • 4 DP FLOP / ciclo: suma SSE2 de 2 anchos + multiplicación SSE2 de 2 anchos
  • 8 SP FLOP / ciclo: suma SSE de 4 anchos + multiplicación SSE de 4 anchos

Bulldozer / Piledriver / Steamroller / Excavator AMD, por módulo (dos núcleos):

  • 8 DP FLOP / ciclo: FMA de 4 anchos
  • 16 SP FLOP / ciclo: FMA de 8 anchos

AMD Ryzen

  • 8 DP FLOP / ciclo: FMA de 4 anchos
  • 16 SP FLOP / ciclo: FMA de 8 anchos

x86 de baja potencia

Intel Atom (Bonnell / 45nm, Saltwell / 32nm, Silvermont / 22nm):

  • 1.5 DP FLOP / ciclo: suma escalar SSE2 + multiplicación escalar SSE2 cada dos ciclos
  • 6 SP FLOP / ciclo: suma SSE de 4 anchos + multiplicación SSE de 4 anchos cada dos ciclos

AMD Bobcat:

  • 1.5 DP FLOP / ciclo: suma escalar SSE2 + multiplicación escalar SSE2 cada dos ciclos
  • 4 SP FLOP / ciclo: suma SSE de 4 anchos cada dos ciclos + multiplicación SSE de 4 anchos cada dos ciclos

AMD Jaguar:

  • 3 DP FLOP / ciclo: adición de AVX de 4 anchos cada dos ciclos + multiplicación de AVX de 4 anchos en cuatro ciclos
  • 8 SP FLOP / ciclo: suma de AVX de 8 anchos cada dos ciclos + multiplicación de AVX de 8 anchos cada dos ciclos


BRAZO

BRAZO Cortex-A9:

  • 1.5 DP FLOP / ciclo: suma escalar + multiplicación escalar cada dos ciclos
  • 4 SP FLOPs / ciclo: adición de NEON de 4 anchos cada dos ciclos + multiplicación de NEON de 4 anchos cada dos ciclos

BRAZO Cortex-A15:

  • 2 DP FLOP / ciclo: escalar FMA o escalar multiplicar-agregar
  • 8 SP FLOP / ciclo: NEONv2 FMA de 4 anchos o NEON de 4 anchos multiplicado-suma

Qualcomm Krait:

  • 2 DP FLOP / ciclo: escalar FMA o escalar multiplicar-agregar
  • 8 SP FLOP / ciclo: NEONv2 FMA de 4 anchos o NEON de 4 anchos multiplicado-suma

IBM POWER

IBM PowerPC A2 (Blue Gene / Q), por núcleo:

  • 8 DP FLOP / ciclo: QPX FMA de 4 anchos cada ciclo
  • Los elementos SP se extienden a DP y se procesan en las mismas unidades

IBM PowerPC A2 (Blue Gene / Q), por hilo:

  • 4 DP FLOP / ciclo: QPX FMA de 4 anchos cada dos ciclos
  • Los elementos SP se amplían a DP y se procesan en las mismas unidades

Intel MIC / Xeon Phi

Intel Xeon Phi (Knights Corner), por núcleo:

  • 16 DP FLOP / ciclo: FMA de 8 anchos cada ciclo
  • 32 SP FLOP / ciclo: FMA de 16 anchos cada ciclo

Intel Xeon Phi (Knights Corner), por hilo:

  • 8 DP FLOP / ciclo: FMA de 8 anchos cada dos ciclos
  • 16 SP FLOP / ciclo: FMA de 16 anchos cada dos ciclos

Intel Xeon Phi (Knights Landing), por núcleo:

  • 32 DP FLOP / ciclo: dos FMA de 8 anchos cada ciclo
  • 64 SP FLOP / ciclo: dos FMA de 16 anchos cada ciclo

La razón por la que hay datos por hilo y por núcleo para IBM Blue Gene / Q e Intel Xeon Phi (Knights Corner) es que estos núcleos tienen una mayor tasa de problemas de instrucción cuando se ejecutan más de un hilo por núcleo.

El rendimiento de Haswell es menor para la suma que para la multiplicación y FMA. Hay dos unidades de multiplicación / FMA, pero solo una unidad de suma fp. Si su código contiene principalmente adiciones, entonces debe reemplazar las adiciones por instrucciones FMA con un multiplicador de 1.0 para obtener el máximo rendimiento.

La latencia de las instrucciones FMA en Haswell es 5 y el rendimiento es 2 por reloj. Esto significa que debe mantener 10 operaciones paralelas para obtener el máximo rendimiento. Si, por ejemplo, desea agregar una lista muy larga de números fp, tendrá que dividirla en diez partes y usar diez registros acumuladores.

De hecho, esto es posible, pero ¿quién haría una optimización tan extraña para un procesador específico?

Aquí puedes ver las comentarios y valoraciones de los usuarios

Agradecemos que quieras añadir valor a nuestra información tributando tu experiencia en las interpretaciones.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *