Professional Documents
Culture Documents
práctica) apreciando con toda claridad la (“emparejarse” en las tuberías U y V), se llaman
importancia del orden de las instrucciones, de las reglas de emparejamiento. En los Pentium estas
dependencias reales, del desenrollado, etc. reglas son muchas pero las más básicas, con las
El acceso a bajo nivel de un sistema real tan que trabajaremos en esta demo, se resumen en que
complejo como los PC con Pentium, implica que las dos instrucciones deben de ser del núcleo
cualquier “perturbación” en el sistema puede RISC (sin desplazamientos complejos ni prefijos),
falsear los resultados de la práctica. Por tal motivo no pueden tener dependencias y que los saltos
se decidió ejecutar la práctica sobre un sistema sólo pueden emparejarse si van en la tubería V (se
monotarea, ya que el “ruido” que introduce un permite el emparejamiento de las instrucciones de
S.O. multitarea es bastante considerable. De comparación con un salto condicional).
hecho, aunque ya hay aplicaciones visuales [3] Por el contrario a los Pentium, en la familia
que muestran el valor de los contadores, estas Pentium P6 (cuyo primer miembro fue el Pentium
corren sobre Windows, de forma que no es fácil, Pro [4], y después los Pentium II y III), se
por ejemplo, determinar la diferencia de tiempo de introdujo planificación y especulación dinámicas,
ejecución entre dos fragmentos de código de forma que la endoarquitectura se modificó
ordenados de forma distinta. En concreto hemos radicalmente. Las fases de los P6 son 10 (o más si
usado MS-DOS por su disponibilidad por parte de está a la espera de datos):
una amplia mayoría del alumnado. • IFU1, IFU2 e IFU3: Búsqueda, separación y
alineamiento en frontera de 16 bytes de las
instrucciones.
2. Contenidos y descripción de la sesión • DEC1 y DEC2: Decodificación y traducción
de instrucciones complejas en micro-
En el boletín de prácticas se da al alumnado operaciones (micro-ops).
un resumen de la estructura de tuberías de los • RAT: Renombrado dinámico de registros.
Pentium y de las reglas de emparejamiento de • DIS y ROB: Espera por datos en estaciones de
instrucciones. Al comienzo de la sesión se reserva y encola en buffer de reordenación.
recuerdan rápidamente los aspectos del juego de • EX: Ejecución.
instrucciones que más pueden influir en los • RET1 y RET2: Retira la instrucción del buffer
resultados de la práctica. de reordenación.
Recordemos brevemente que la cadena de los Las instrucciones simples se traducen por
Pentium contiene 5 fases [5]: una micro-op, mientras que las complejas pueden
• PF: Prebúsqueda o “PreFetch”. convertirse hasta en 4 micro-ops o incluso en una
• ID1: Etapa primera de decodificación. secuencia de microcódigo de la ROM interna.
• ID2: Etapa segunda de decodificación. Los P6 Pentium tiene 5 unidades funcionales
• EX: Ejecución. (aritmética genérica, aritmética simple más saltos,
• WB: Escritura en memoria o registros. una de carga y dos de almacenamiento), pero en
El Pentium no dispone de planificación cada ciclo sólo pueden renombrar los registros de
(scheduling) ni de especulación dinámicas. Con hasta 3 instrucciones, de forma que, en principio,
sus dos tuberías (U y V) puede alcanzar, en se puede alcanzar un ritmo máximo sostenido de
principio, un CPI=1/2 (para instrucciones enteras). CPI=1/3 (para instrucciones enteras). Por el
Pero existen unas restricciones sobre la emisión en contrario, las restricciones de ejecución son
paralelo de las mismas. Se llama emparejamiento mucho más leves (vendrían de comparar el tipo de
a la emisión de dos instrucciones en paralelo. La instrucciones que esperan en el buffer de
tubería U puede ejecutar cualquier instrucción reordenación con las unidades funcionales),
(tubería genérica), mientras que la tubería V sólo permitiendo en algunos ciclos lanzar hasta 5
puede ejecutar saltos o instrucciones enteras micro-ops.
“simples” (núcleo RISC). Cuando dos Por otro lado en esta sesión se recuerda cómo
instrucciones se emparejan, la emitida en la trabajar con los PMC (ya se ha trabajado con ellos
tubería V es siempre la siguiente instrucción a la en prácticas). Éstos se incluyeron a partir de los
emitida en la tubería U, según el orden código. procesadores Pentium, y en los P6 se modificaron.
Las condiciones que deben de cumplir dos A partir de aquí, Intel garantiza su mantenimiento
instrucciones para que se puedan emitir a la vez para futuros Pentium (si bien añade nuevos
Demos 439
eventos orientados, por ejemplo, a las nuevas varias veces el mismo programa, escogiendo
instrucciones MMX). Para poder acceder a los distintos eventos cada vez.
contadores la tarea debe ser de privilegio 0. Todos La estructura de un programa que mida
los Pentium tienen sólo dos contadores internos de eventos se muestra en la Fig. 1, y los programas
eventos, más otro de tiempo (los “ticks” o ciclos de esta demo son un ejemplo. En el “código de
de reloj). Hay muchísimos eventos [1], de forma prueba” se han de insertar las instrucciones
que disponemos de una información completísima ensamblador que se quieren monitorizar.
de la ejecución real del procesador. Todos los ficheros anteriores se suministran
Para leer los dos contadores de eventos y el al alumno, aparte de un proyecto (.prj de
contador de ciclos, Intel ha introducido las BorlandC, TurboC o similar), para poder compilar
instrucciones wrmsr, rdpmc, rdtsc, con las cuales y linkar correctamente, de manera que éste no ha
se puede respectivamente: seleccionar los dos de entrar en detalles sobre la implementación
eventos para cada contador, examinar la cuenta de antes explicada, y sólo debe preocuparse por las
ellos o leer la cuenta de ciclos. medidas sobre el código de prueba. Con todo ello,
Para trabajar con más comodidad con los tres el alumno deberá elegir los eventos relacionados
contadores se han escrito librerías de rutinas para con las tuberías e ir extrayendo conclusiones sobre
su programación y acceso (P5stats.asm, P5stats.h el tiempo de ejecución de cada fragmento.
para Pentium y P6stats.asm, P6stats.h para P6), Con la librería de medida de eventos y ciclos
para lenguaje C. Éstas pueden inicializar la cuenta y con un programa con la estructura de la Fig. 1,
de eventos (o ciclos) o detenerla, y se describen a se pueden plantear en primer lugar sesiones de
continuación: prácticas, donde se compruebe el impacto de las
• void SelecEvento (BYTE NumCont, BYTE optimizaciones de bajo nivel en el tiempo de
Evento, BYTE UMask, BYTE TipoCont); /* ejecución. Por ejemplo, para los Pentium la
Selecciona en el contador 0 ó 1 con NumCon., reordenación manual de fragmentos de código que
El evento especificado en Evento. En TipoCont contienen dependencias o que violan las reglas de
el valor 0 (cuenta eventos) o 1 (cuenta ciclos de emparejamiento, conduce a un aumento del IPC
reloj). UMask es un parámetro que en algunos (Instrucciones Por Ciclo [2]). Por el contrario,
casos especifica aún más concretamente el tipo estos mismos fragmentos de código pueden ser
de evento a medir, recogidos en [1] */ lanzados sobre un Pentium P6 sin que la
• void ComenzarMonitor (void); /* Comienza la reordenación afecte (en general) al IPC, debido a
cuenta de eventos en ambos contadores (lee y que la planificación dinámica de éste absorbe las
guarda el valor de los contadores) */ dependencias. Otro tema de estudio son las
• void TerminarMonitor (void); /* Termina la instrucciones que no pertenecen al núcleo RISC.
cuenta de eventos en ambos contadores, En el Pentium éstas suponen un detrimento
devolviendo el incremento en las variables apreciable de prestaciones, mientras que para los
globales MPContador0 y MPContador1) */ P6 muchas de ellas se suelen convertir en micro-
• void TSCComenzar (void); /* Comienza la ops, entrando a ejecutarse junto a las otras
cuenta de ciclos del reloj (lee y guarda el valor instrucciones simples. Usando eventos que
del contador de ciclos) */ devuelven el número de instrucciones y de micro-
• DWORD TSCTerminar (void); /* Termina la ops el alumno puede reconocer cómo ha sido la
cuenta de ciclos del reloj y devuelve el tiempo conversión anterior. También es interesante que
transcurrido con respecto a la llamada a comprenda que algunas instrucciones del conjunto
TSCComenzar (lee el valor del contador de más CISC, producen un deterioro inmenso en las
ciclos y lo resta del valor antes guardado) */ prestaciones. Por ejemplo, la instrucción LOOP,
Con las funciones anteriores se puede que ha de ejecutarse como secuencia de
realizar una medida de tiempo (en ciclos de reloj) microcódigo. Otros factores que pueden estudiarse
más dos medidas de eventos para cualquier código son la alta penalización por fallo de predicción de
de prueba; en nuestro caso, medidas de los la BTB, diferencia entre el número de
accesos a vectores con tamaño y patrones de instrucciones emitidas y el de retiradas, etc.
recorrido diferentes para calcular los parámetros Por último, se puede mostrar la importancia
de los caches. Evidentemente si se desean medir de la técnica del desenrollado, calculando la
más de dos tipos de eventos, deberá ejecutarse aceleración que introduce. Además, los alumnos
440 Demos