La tabla de planificación (TP) es una estructura en la que se va almacenando de forma secuencial las instrucciones que van a ser ejecutadas. Tiene el funcionamiento de una cola (FIFO). Para controlar el funcionamiento de la cola se usan dos punteros: uno indica la posición libre (puntero de cola, denominado aquí newp) donde se insertará la próxima instrucción enviada por la fase IS; el segundo puntero (de cabecera, llamado oldp) indica la próxima instrucción que va ser retirada la TP.
La principal característica de la TP es que las instrucciones son introducidas en ella en orden, ejecutadas fuera de orden y retiradas (es decir, su resultado se escribe en el fichero de registro) de ella de nuevo en orden. Una instrucción es retirada de la cola cuando está finalizada y las anteriores a ellas han finalizado y han sido retiradas de la cola. Esto ocurre cuando el puntero de la cabeza apunta a dicha instrucción. De esta forma, cuando una predicción de salto ha sido incorrecta, es fácil y seguro borrar de la cola todas las instrucciones temporalmente posteriores a la de salto, ya que están ordenadas en la tabla de planificación. La forma de hacer esto es mover el puntero que indica la siguiente posición libre de la cola hasta la instrucción primera a cancelar.
La etiqueta asignada al operando destino de una instrucción es la dirección que ocupa dicha instrucción en la TP. Cuando se introduce una instrucción en la TP, para cada operando, se buscan dependencias reales en la TP, comenzando desde la instrucción más nueva hasta la más antigua. De esta forma se asigna siempre a los operandos la etiqueta más reciente, funcionando la TP como un mecanismo de renombrado de registros. Esto implica una búsqueda asociativa con acarreo encadenado entre cada comparación. Si no existiera ninguna dependencia real, el valor del operando se encontraría en el fichero de registro.
Cuando los operandos de una instrucción están disponibles, ésta se marca como preparada (realmente se marcan sus operandos). Cuando hay una unidad funcional libre correspondiente al tipo de instrucción, se selecciona una instrucción preparada y se marca como instrucción no válida, para evitar que vuelva a ser escogida en ciclos posteriores. Se necesitará un puerto de salida por cada instrucción en paralelo que se puedan lanzar a las UF.
Una vez finaliza la ejecución de una instrucción se marca para que pueda ser retirada y escrita en el fichero de registros. Dependiendo del número de puertos existentes entre la TP y el fichero de registros, varias instrucciones pueden ser retiradas simultáneamente. En el caso de que varias instrucciones tengan el mismo registro destino, sólo se escribe la más reciente (identificador más alejado de oldp).
En cuanto a rendimiento, ni la comprobación de dependencias ni el proceso de expedición de instrucciones (Fase IS) incrementa la duración del ciclo de reloj. Tampoco supone un alto coste escribir el resultado de las operaciones en la TP, por cuanto el identificador del resultado es la dirección de la fila de la TP ocupada por la instrucción. Por último, la retirada de instrucciones solo requiere la comprobación de las primeras N direcciones de la TP, siendo N el nº de puertos entre la TP y el fichero de registros. En definitiva, y según el artículo, el mecanismo de la Tabla de Planificación no tienen impacto en el rendimiento. Parece que tampoco lo tiene en el consumo, ni para mejorar ni empeorar este aspecto. La propuesta de este artículo se presenta únicamente como un mecanismo para mejorar la recuperación del estado ante predicciones erróneas de salto.
Resumen del artículo Enhanced Sperscalar Hardware: The Schedule Table de J. K. Pickett y D. G. Meyer (Advanced Micro Devices, Purdue University)