El rendimiento rápido de un solo subproceso y el alto rendimiento de subprocesos múltiples es exactamente lo que obtienes con una CPU como la Xeon E5-2699v4 de Intel .
Es un Broadwell de 22 núcleos. La velocidad de reloj sostenida es de 2.2 GHz con todos los núcleos activos (por ejemplo, codificación de video), pero el turbo máximo de un solo núcleo es de 3.6 GHz.
Entonces, mientras ejecuta una tarea paralela, usa su presupuesto de energía de 145W como 22 núcleos de 6.6W. Pero mientras ejecuta una tarea con solo unos pocos subprocesos, ese mismo presupuesto de energía permite que algunos núcleos turbo hasta 3.6GHz. ( Sin embargo, la memoria de un solo núcleo más baja y el ancho de banda de caché L3 en un gran Xeon significa que podría no funcionar tan rápido como un quad-core de escritorio a 3.6GHz. Sin embargo, un solo núcleo en una CPU Intel de escritorio puede usar mucho más ancho de banda total de memoria)
La velocidad de reloj nominal de 2.2GHz es tan baja debido a los límites térmicos. Cuantos más núcleos tenga una CPU, más lento tendrá que ejecutar cuando todos estén activos. Este efecto no es muy grande en las CPU de 4 y 8 núcleos que mencionas en la pregunta, porque 8 no tiene tantos núcleos y tienen presupuestos de energía muy altos. Incluso las CPU de escritorio entusiastas muestran notablemente este efecto: el Skylake-X i9-7900X de Intel es una parte de 10c20t con una base de 3.3GHz, turbo máximo de 4.5GHz . Eso es mucho más espacio libre turbo de un solo núcleo que i7-6700k (4.0GHz sostenido / 4.2GHz turbo sin overclocking).
La escala de frecuencia / voltaje (DVFS) permite que el mismo núcleo opere en un amplio rango de la curva de rendimiento / eficiencia. Consulte también esta presentación de IDF2015 sobre la administración de energía de Skylake , con muchos detalles interesantes sobre lo que las CPU pueden hacer de manera eficiente, y compensando el rendimiento frente a la eficiencia tanto estáticamente en el momento del diseño como sobre la marcha con DVFS.
En el otro extremo del espectro, las CPU Intel Core-M tienen una frecuencia sostenida muy baja, como 1.2GHz a 4.5W , pero pueden aumentar hasta 2.9GHz. Con múltiples núcleos activos, ejecutarán sus núcleos a una velocidad de reloj más eficiente, al igual que los gigantes Xeons.
No necesita una arquitectura heterogénea de estilo big.LITTLE para obtener el mayor beneficio. Los núcleos pequeños en ARM big.LITTLE son núcleos en orden bastante malos que no son buenos para el trabajo de cómputo. El punto es simplemente ejecutar una interfaz de usuario con muy poca potencia. Muchos de ellos no serían geniales para la codificación de video u otros ajustes serios de números. ( @ Lưu Vĩnh Phúc encontró algunas discusiones sobre por qué x86 no tiene big.LITTLE . Básicamente, gastar silicio adicional en un núcleo extra lento de muy baja potencia no valdría la pena para el uso típico de computadoras de escritorio / portátiles).
mientras que las aplicaciones como la edición de video están determinadas por el número de núcleos. [¿No sería mejor 2x 4.0 GHz + 4x 2.0 GHz en cargas de trabajo de subprocesos múltiples que 4x 4GHz?]
Este es tu malentendido clave. Parece que piensa que la misma cantidad total de tics de reloj por segundo es más útil si se distribuye en más núcleos. Ese nunca es el caso. Es mas como
cores * perf_per_core * (scaling efficiency)^cores
( perf_per_core
no es lo mismo que la velocidad del reloj, porque un Pentium4 de 3GHz tendrá mucho menos trabajo por ciclo de reloj que un Skylake de 3GHz).
Más importante aún, es muy raro que la eficiencia sea 1.0. Algunas tareas vergonzosamente paralelas se escalan casi linealmente (por ejemplo, compilar múltiples archivos fuente). Pero la codificación de video no es así. Para x264, el escalado es muy bueno hasta algunos núcleos, pero empeora con más núcleos. por ejemplo, pasar de 1 a 2 núcleos casi duplicará la velocidad, pero pasar de 32 a 64 núcleos ayudará mucho menos para una codificación típica de 1080p. El punto en el que las mesetas de velocidad dependen de la configuración. ( -preset veryslow
realiza más análisis en cada cuadro y puede mantener más núcleos ocupados que -preset fast
).
Con muchos núcleos muy lentos, las partes de un solo hilo de x264 se convertirían en cuellos de botella. (por ejemplo, la codificación de flujo de bits CABAC final. Es el equivalente de h.264 de gzip, y no se paraleliza). Tener algunos núcleos rápidos resolvería eso, si el sistema operativo supiera programarlo (o si x264 fijó los hilos apropiados a núcleos rápidos).
x265 puede aprovechar más núcleos que x264, ya que tiene más análisis que hacer, y el diseño WPP de h.265 permite un mayor paralelismo de codificación y decodificación. Pero incluso para 1080p, te quedas sin paralelismo para explotar en algún momento.
Si tiene múltiples videos para codificar, hacer múltiples videos en escalas paralelas también, a excepción de la competencia por recursos compartidos como la capacidad de caché L3 y el ancho de banda, y el ancho de banda de la memoria. Menos núcleos más rápidos podrían obtener más beneficios de la misma cantidad de caché L3, ya que no tendrían que trabajar en tantas partes diferentes del problema a la vez.