Cuando Intel diseñó el 80386 incorporó un mecanismo para ocultar la latencia de memoria llamado Early Start: en el último ciclo de cada instrucción la CPU ya inicia el cálculo de dirección, la relocalización de segmento y el ciclo de bus de la siguiente. Intel estimaba su aporte en torno al 9 % del rendimiento y, además, es el origen del conocido bug de POPAD. El núcleo z386, una implementación FPGA del 386 publicada en mayo, carecía de esta optimización. Durante el último mes su autor añadió Early Start junto con otras mejoras en el pipeline de memoria y, como resultado, z386 alcanzó el rendimiento del ao486. En Doom (detalles máximos) pasó de 16,6 a 23,0 FPS, un 39 % más, superando los 21,0 FPS del ao486; en el benchmark 16 bits 3DBench también lo rebasó. La frecuencia del tablero se mantuvo en 85 MHz, de modo que las ganancias provienen exclusivamente de reducir los ciclos por instrucción. La implementación reproduce la lógica cableada del 386 para generar la dirección efectiva en el ciclo de early start, con una red de forwarding que suministra el valor correcto cuando la instrucción anterior escribe un registro usado como base o índice, replicando también el corner case del bug de POPAD. Además se acortó la cola de store liberando antes el micro-op DLY, se fusionaron las etapas de TLB y petición de caché en el primer ciclo de la instrucción, y se adoptó una caché dividida de 16 KB de instrucciones y 16 KB de datos, físicamente indexada y etiquetada, con protocolo de snooping para mantener la coherencia. El objetivo no es la precisión ciclo a ciclo, sino un comportamiento funcionalmente equivalente con mejor CPI.
Early Start del 80386: así se redujo la latencia de memoria en el núcleo z386
Fuentes:
80386 Early Start Memory Access
