Ejemplos de instrucciones de salto condicional
Clasificado en Informática
Escrito el en español con un tamaño de 5,87 KB
La segmentación de cauce (pipelining) es una forma particularmente efectiva de organizar el hardware de la CPU para realizar más de una operación al mismo tiempo. Consiste en descomponer el proceso de ejecución de las instrucciones en fases o etapas que permitan una ejecución simultánea. Explota el paralelismo entre las instrucciones de un flujo secuencial.
Motivos de retardo de cauce.
Estructurales: Provocados por conflictos por los recursos ej: Dos o mas instrucciones necesitan utilizar el mismo recurso hardware en el mismo ciclo. (IF y MA con memoria unificada)
Por dependencia de datos: Ocurren cuando dos instrucciones se comunican por medio de un dato (ej.: una lo produce y la otra lo usa) ej: Condición en la que los operandos fuente o destino de una instrucción no están disponibles en el momento en que se necesitan en una etapa determinada del cauce.
Lectura después de Escritura (RAW, dependencia verdadera): una instrucción genera un dato que lee otra posterior
Escritura después de Escritura (WAW, dependencia en salida): una instrucción escribe un dato después que otra posterior sólo se da si se deja que las instrucciones se adelanten unas a otras
Escritura después de Lectura (WAR, antidependencia): una instrucción modifica un valor antes de que otra anterior que lo tiene que leer, lo lea. ( no se puede dar en nuestro cauce simple )
Por dependencia de control: Ocurren cuando la ejecución de una instrucción depende de cómo se ejecute otra (ej.: un salto y los 2 posibles caminos)
Que ventajas proporciona su implementación.
Describa los métodos y técnicas utilizadas para disminuir o evitar las paradas que afectaran al funcionamiento de los cauces.
Soluciones a riesgos estructurales: Duplicación de recursos hardware
Sumadores o restadores además de la ALU
Separación en memorias de instrucciones y datos
Turnar el acceso al banco de registros
Escrituras en la 1o mitad de los ciclos de reloj. Lecturas en la 2o mitad de los ciclos de reloj
Soluciones a riesgos de datos: Para riesgos RAW: se debe determinar cómo y cuando aparecen esos riesgos
Por hardware: adelantamiento de operandos. Consiste en pasar directamente el resultado obtenido con una instrucción a las instrucciones que lo necesitan como operando.
Por software: uso de instrucciones NOP o reordenamiento de instrucciones. Es ejecutada por el compilador. Evita los riesgos reordenando las instrucciones del código sin afectar los resultados
Soluciones a riesgos de Control:
para saltos incondicionales la única solución es resolver lo mas rápidamente posible la dirección de la próxima instrucción a ejecutar.
para saltos condicionales es mas complejo ya que se depende del resultado de la instrucción anterior para determinar el orden de ejecución.
Soluciones:
- Precaptar el destino del salto
- Flujos Múltiples
- Buffer de bucles
- Predicción de saltos
- Salto retardado
Precaptar el destino del salto: (hardware) una solución sencilla es adelantar la resolución de la dirección de salto a la misma etapa de decode, donde ya se puede definir que una operación es de salto. Con este método se reduce la cantidad de paradas del cauce a solamente una.
Flujos Múltiples: (hardware) Varios cauces (uno por cada opción de salto). Precaptan cada salto en diferentes cauces. Se debe utilizar el cauce correcto. Desventajas: Provoca retardos en el acceso al bus y a los registros. Si hay múltiples saltos, se necesita un mayor número de cauces.
Buffer de bucles: (hardware) un buffer de bucles es una memoria pequeña de gran velocidad, gestinoada por la etapa de captación de instrucción. Contiene, secuencialmente las n instrucciones captadas mas recientemente. Si se va a producir un salto, el hardware comprueba en primer lugar si el destino de salto esta en el buffer.
Salto retardado (software): se pueden mejorar las prestaciones de un cauce reordenando automáticamente las instrucciones de un programa de forma que las instrucciones de salto tengan lugar después de lo realmente deseado.
Predicción de saltos:
Soluciones Estáticas:
predecir que nunca se salta: supone que el salto no se producirá y continuara captando instrucciones secuencialmente.
predecir que siempre se salta: supone que el salto se producirá y siempre captara la instrucción destino del salto.
predecir según el código de operación: el procesador asume que el salto se producirá para ciertos códigos de operación de bifurcación y no para otros.
Soluciones Dinámicas: buscan mejorar la exactitud de la predicción, registrando la historia de las instrucciones de bifurcadcion condicional en un programa. A cada instrucción se le asocian uno o mas bits que reflejen su historia reciente. Dichas instrucciones pueden ser guardadas en la memoria cache o alguna memoria rápida dedicada.
conmutador saltar/no saltar: el procesador referencia los bits asociados a la instrucción para tomar una desicion al momento de captar la próxima instrucción.
Tabla de historia de salto: similar a la técnica previa pero agrega también a la tabla la dirección de la próxima instrucción o incluso puede guardar directamente la instrucción a ejecutar.
Cuanto mejora el rendimiento?
El máximo rendimiento teórico es completar una instrucción con cada ciclo de reloj. Incrementa la productividad (throughput), pero no reduce el tiempo de ejecución de la instrucción