Como todos conocéis, desde Sandy Bridge 32 nm, Intel introdujo las instrucciones AVX FPU de 256 bit en sus procesadores aumentando con ello en un factor 2 la potencia de cálculo FPU de sus CPUs respecto a Nehalem 45 nm y Westmere 32 nm.
Uno de los cores Skylake 14nm.
Con la microarquitectura Haswell 22 nm, Intel añadió el juego de instrucciones AVX2 y FMA FPU, que proporcionan proceso vectorial de enteros de 256 bit y unidades FPU Fused Multiply Accumulate combinadas respectivamente.
Intel Skylake Core i7 6700K
Hasta el momento, el Core i7 6700K es la CPU x86 quad core más rápida que he probado y además con un consumo de energía excelente. Y muy adecuada para cálculo matemático gracias al soporte AVX 256 bit y FMA junto a sus 8 threads simultáneos y el brutal ancho de banda de un dual channel DDR4 a frecuencias superiores a los 3 GHz.
En este artículo quiero resaltar una particularidad de los últimos procesadores Skylake 14 nm(Intel Core de sexta generación) que he comprobado en samples de Core i7 6700K configurados a 4.4 GHz.
Esta peculiaridad es el ahorro de energía en el que mantienen las unidades de cálculo vectorial de 256 bit cuando no están en uso, es decir, en las tareas más habituales del sistema operativo que no suelen involucrar cálculos FPU.
Es en el momento de lanzar un cálculo que actiave estas unidades de 256 bit, cuando se produce un fenómeno curioso.
Los 60000 ciclos AVX perdidos en Intel Skylake
Al inicio, y de manera sorprendente, la velocidad de proceso es de unas 4 a 6 veces inferior a la nominal en proceso AVX FPU, debido a que las unidades permanecen en ese estado latente de bajo consumo, probablemente con los 128 bit superiores deshabilitados y los datapath de 256 bit desactivado.
Tras un tiempo, dependiente de múltiples factores (la frecuencia de nuestro procesador, quizás de ajustes en la BIOS de nuestro sistema y también de peculiaridades o ajustes de nuestro sistema operativo) la velocidad de cálculo llega a su valor típico y normal y se mantiene ahí hasta finalizar el cálculo.
Este tiempo de rendimiento reducido ronda los 60000 ciclos (unos 13 microsegundos en una CPU a 4.4 GHz).
Puede parecer poco tiempo, pero si nuestro cálculo consiste en pequeñas ráfagas de código AVX intercaladas entre otros fragmentos de código de otro tipo, puede provocar que nuestro cálculo sea globalmente unas 2 a 5 veces más lento de lo esperado (!!).
Como solución podemos hacer que estos cálculos en ráfaga procesen a velocidad nominal (elevada) si los mantenemos próximos en el tiempo, ya que estas unidades FPU AVX de 256 bit mantienen su velocidad de proceso durante unos 3 000 000 de ciclos (equivalentes a unos 600 micro segundos en una CPU a 4.4 GHz), después de los cuales retornan al estado de reposo y bajo rendimiento.
Otra solución consistiría en ir lanzando “de vez en cuando” algunas instrucciones AVX 256 bit para “despertar” las unidades FPU momentos antes (unos 60000 ciclos) de que lleguemos a ejecutar nuestro importante código AVX 256 bit.
Echad un vistazo a la web de mi nueva empresa, un proyecto de gran envergadura que llevo preparando hace más de un año.
Os lo recomiendo para diseño de sistemas de altas prestaciones:
Allí tenéis a vuestra disposición el formulario de contacto, para consultas sobre este artículo hacedlo más abajo en la sección de comentarios.
Y mi nuevo Blog de contenido muy técnico y actualizado donde encontraréis artículos míos sobre hardware, procesadores y sistemas y también otros posts de expertos programadores e informáticos sobre otros temas de actualidad:
Si consideras útil el contenido de este Blog, ayuda a mantenerlo ojeando algunas de las ofertas que consideres interesantes de nuestros anunciantes. Gracias de antemano.
El que tenga dudas o aportaciones tiene para ello la sección de comentarios, intentaré responder a todos y con la máxima claridad. Los Blogs deben de ser lugares de intercambio y agradezco vuestro feedback.