Técnicas para evitar riesgos RAW

Rocordando lo que es un Riesgo tipo RAW (Read After Write): también conocido como dependencia verdadera, se produce cuando la instrucción j intenta leer un dato antes de que la instrucción i lo escriba.

La reorganización de código.

Consiste en disponer las instrucciones en el programa de forma que entre las instrucciones con dependencias tipo RAW existan instrucciones que permitan retrasar la segunda instrucción con respecto a la primera, de esta forma la primera tendrá tiempo a escribir su resultado antes que la segunda la lea.
Debemos de mantener la semántica original del programa, el orden original de las lecturas y escrituras de los registros y la memoria.
En el caso de que el compilador no pueda reorganizar el código se deben insertar instrucciones NOP, entre las instrucciones que tengan dependencia de datos. Una ventaja es que no hace falta un hardware adicional, pero se necesita un compilador más complejo y pérdida de tiempo.

El interbloqueo entre etapas.

Se introducen elementos hardware en el cauce para detectar la existencia de dependencias, en el caso que detecte una la instrucción se detiene el número de ciclos necesarios. El programa finaliza correctamente pero seguimos perdiendo ciclos lo que nos lleva a una disminución del rendimiento.

El adelantamiento (Caminos de bypass o forwarding).

Con esta técnica aprovechamos los elementos de la técnica de interbloqueo y la utilizamos para habilitar una serie de buses para permitir que los resultados de una etapa pasen como entradas a la etapa donde son necesarios en caso de dependencias RAW, a la vez que prosigue su camino para almacenarse en el fichero de registros.
La función que tiene la lógica de bypass es comprobar si hay coincidencia entre el identificador del registro de destino de la instrucción que acaba su etapa EX y los identificadores de los registros fuente de los operandos de la instrucción siguiente que va a iniciar su etapa EX.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s