cpu - tecnologia - FLOPS por ciclo para sandy-bridge y haswell SSE2/AVX/AVX2
sse streaming simd extension (2)
Aquí están los recuentos de FLOP para una serie de microarquitecturas 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 suma 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.
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-an-unprecedented-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.
El rendimiento de Haswell es menor para la suma 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?