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:
Intel Sandy Bridge / Ivy Bridge:
Intel Haswell / Broadwell / Skylake / Kaby Lake:
AMD K10:
Bulldozer AMD / Piledriver / Steamroller / Excavator, por módulo (dos núcleos):
AMD Ryzen
Intel Atom (Bonnell / 45nm, Saltwell / 32nm, Silvermont / 22nm):
AMD Bobcat:
AMD Jaguar:
ARM Cortex-A9:
ARM Cortex-A15:
Qualcomm Krait:
IBM PowerPC A2 (Blue Gene / Q), por núcleo:
IBM PowerPC A2 (Blue Gene / Q), por subproceso:
Intel Xeon Phi (Knights Corner), por núcleo:
Intel Xeon Phi (Knights Corner), por tema:
Intel Xeon Phi (Knights Landing), por núcleo:
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?