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

Estoy confundido sobre cuántos fracasos por ciclo por núcleo se pueden hacer con Sandy-Bridge y Haswell. Como lo entiendo con SSE, debería ser 4 flops por ciclo por núcleo para SSE y 8 flops por ciclo por núcleo para AVX / AVX2.

Esto parece verificarse aquí. ¿Cómo logro el máximo teórico de 4 FLOP por ciclo? , y aquí, la especificación de la CPU Sandy-Bridge .

Sin embargo, el siguiente enlace parece indicar que Sandy-bridge puede hacer 16 fracasos por ciclo por núcleo y Haswell 32 flops por ciclo y núcleo. Http://www.extremetech.com/computing/136219-intels-haswell-is-un-receprecented -threat-to-nvidia-amd .

¿Alguien me puede explicar esto?

Editar: ahora entiendo por qué estaba confundido. Pensé que el término FLOP solo se refería al punto flotante único (SP). Ahora veo que la prueba en ¿Cómo logro el máximo teórico de 4 FLOP por ciclo? en realidad están en doble punto flotante (DP), por lo que logran 4 DP FLOPs / cycle para SSE y 8 DP FLOPs / cycle para AVX. Sería interesante volver a hacer estas pruebas en SP.

Aquí están los recuentos de FLOP para una serie de microarchitectures de procesador recientes y una explicación de cómo lograrlos:

Intel Core 2 y Nehalem:

  • 4 DP FLOPs / cycle: 2-wide SSE2 addition + 2-wide SSE2 multiplication
  • 8 SP FLOPs / cycle: 4-wide SSE addition + 4-wide SSE multiplication

Intel Sandy Bridge / Ivy Bridge:

  • 8 DP FLOPs / cycle: 4-wide AVX addition + 4-wide AVX multiplication
  • 16 SP FLOPs / cycle: 8-wide AVX addition + 8-wide AVX multiplication

Intel Haswell / Broadwell / Skylake / Kaby Lake:

  • 16 DP FLOPs / cycle: dos instrucciones FMA de 4 amplios (fusionado, multiplicar y agregar)
  • 32 SP FLOPs / cycle: dos instrucciones de 8 ampliaciones de FMA (fusionar multiplicar-agregar)

AMD K10:

  • 4 DP FLOPs / cycle: 2-wide SSE2 addition + 2-wide SSE2 multiplication
  • 8 SP FLOPs / cycle: 4-wide SSE addition + 4-wide SSE multiplication

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

  • 8 DP FLOPs / ciclo: 4-wide FMA
  • 16 SP FLOPs / cycle: 8-wide FMA

AMD Ryzen

  • 8 DP FLOPs / ciclo: 4-wide FMA
  • 16 SP FLOPs / cycle: 8-wide FMA

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

  • 1.5 DP FLOPs / cycle: adición escalar SSE2 + multiplicación escalar SSE2 cada dos ciclos
  • 6 SP FLOPs / cycle: adición de SSE de 4 amplios + multiplicación de SSE de 4 pasos cada dos ciclos

AMD Bobcat:

  • 1.5 DP FLOPs / cycle: adición escalar SSE2 + multiplicación escalar SSE2 cada dos ciclos
  • 4 SP FLOPs / cycle: adición de SSE de 4 niveles cada dos ciclos + multiplicación de SSE de 4 pasos cada dos ciclos

AMD Jaguar:

  • 3 DP FLOPs / cycle: adición AVX de 4 pasos cada dos ciclos + multiplicación AVX de 4 pasos en cuatro ciclos
  • 8 SP FLOPs / cycle: 8-wide AVX addition each other cycle + 8-wide multiplication AVX each other cycle

ARM Cortex-A9:

  • 1.5 FLOP DP / ciclo: adición escalar + multiplicación escalar cada dos ciclos
  • 4 SP FLOPs / cycle: 4-wide NEON sum cada dos ciclos + 4-wide NEON multiplication cada dos ciclos

ARM Cortex-A15:

  • 2 DP FLOPs / ciclo: escalar FMA o escalar multiplicar-agregar
  • 8 SP FLOPs / cycle: 4-wide NEONv2 FMA o 4-wide NEON multiplicar-agregar

Qualcomm Krait:

  • 2 DP FLOPs / ciclo: escalar FMA o escalar multiplicar-agregar
  • 8 SP FLOPs / cycle: 4-wide NEONv2 FMA o 4-wide NEON multiplicar-agregar

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

  • 8 DP FLOPs / ciclo: 4-wide QPX FMA cada ciclo
  • Los elementos SP se extienden a DP y se procesan en las mismas unidades

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

  • 4 DP FLOPs / ciclo: 4-wide QPX FMA cada dos ciclos
  • Los elementos SP se extienden a DP y se procesan en las mismas unidades

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

  • 16 DP FLOPs / ciclo: FMA 8-wide cada ciclo
  • 32 SP FLOPs / cycle: 16-wide FMA cada ciclo

Intel Xeon Phi (Knights Corner), por tema:

  • 8 DP FLOPs / ciclo: FMA 8-wide cada dos ciclos
  • 16 SP FLOPs / cycle: 16-wide FMA cada dos ciclos

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

  • 32 DP FLOPs / ciclo: dos FMA de 8 amplios cada ciclo
  • 64 SP FLOPs / cycle: dos FMA de 16 amplios cada ciclo

La razón por la cual hay un dato por subproceso y por núcleo para IBM Blue Gene / Q e Intel Xeon Phi (Knights Corner) es que estos núcleos tienen una tasa de problema de instrucción más alta cuando se ejecuta más de un subproceso por núcleo.

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

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

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