¿Cómo manejan los procesadores las ramas en la ejecución especulativa (después de una rama aún por resolver)? (Ver comentarios para más detalles).

Escribí un procesador especulativo fuera de servicio en verilog cuando estaba en la universidad, por lo que puedo responder esto con cierto grado de confianza.

Cuando predice una rama, continúa como si su predicción fuera 100% correcta. Esto significa que, si encuentra otra rama, simplemente la pronosticará nuevamente y continuará como siempre. Si se determina que su sucursal es un error de predicción, debe eliminar todas las instrucciones que dependen de la validez de la predicción de la sucursal.

Con respecto a la implementación, en un procesador especulativo fuera de servicio estándar, las instrucciones pueden completarse fuera de servicio. Las salidas de las instrucciones se colocan en algún tipo de búfer de reordenamiento para permitir la confirmación en orden. Por ejemplo, no queremos comprometer escrituras de memoria actualizadas y registrar valores hasta que estemos seguros de que todas nuestras ramas están tomadas. Cuando descubrimos un error de predicción, lo eliminamos simplemente invalidando todas las instrucciones completadas en nuestro búfer de reordenamiento.

Implementar un búfer de reordenamiento en verilog no es demasiado difícil. Es similar a implementar cualquier estructura similar a la cola.

  • Tiene un puntero al frente del búfer de reordenamiento. Esto se incrementa cada vez que se compromete la mayor cantidad de instrucciones.
  • Tiene otro puntero en la parte posterior del búfer de reordenamiento. Cuando se obtiene una instrucción, este puntero se incrementa y se asigna a esa instrucción.
  • Cuando se obtiene una instrucción de bifurcación, le asignamos el valor del segundo puntero.
  • A medida que seguimos incrementando el segundo puntero, podemos descubrir que la rama se pronosticó erróneamente. Si es así, simplemente revertimos el segundo puntero a lo que era cuando buscamos la rama (que afortunadamente almacenamos en la viñeta anterior). Esto invalidará efectivamente todas las instrucciones que dependen de esa rama.

La solución más simple y fácil de entender es simplemente agregar más bits especulativos. De esa manera, puede rastrear múltiples ramas especulativas y aplastar las instrucciones especulativas apropiadas. Básicamente, necesita canalizar los bits especulativos, así como las instrucciones en sí.

Ahora, la objeción obvia a esto es “¿y si hay un montón de ramas consecutivas?” Bueno, no es que podamos seguir agregando más y más bits, eventualmente solo tenemos que admitir que el programador hizo un trabajo horrible escribiendo su programa o compilador (quiero decir, ¿qué programa tendrá tantas ramas consecutivas?). En ese caso, su problema puede resolverse con contrapresión. “El procesador no está tomando más instrucciones hasta que se aborde el lío actual de ramas consecutivas”.

More Interesting

¿Es correcto referir la memoria interna móvil como ROM?

He desarrollado mucho interés orientado a la investigación en física cuántica y ciencias de la computación / ciencia computacional, pero estoy buscando un BE en CSE de alguna universidad baja. No lo he intentado para IISC / IIST / IIT. Ahora me arrepiento de mi decisión. ¿Puedo hacer algo de justicia con mis intereses en este momento?

¿Vale la pena tomar CS 153 (compiladores) en Harvard?

Cómo prepararse para un trabajo de ingeniería de software

¿Qué libros sobre la lógica de segundo orden en CS me recomendarías?

¿Dónde descansan los servidores CS50?

Estoy muy interesado en buscar la interacción hombre-computadora. ¿Cuál sería un título universitario ideal para llegar allí?

Cómo traducir datos binarios al formato de ADN

¿Cuál es la mejor herramienta o software para estilometría?

Cómo cambiar entre diferentes IP de diferentes ISP

¿Dónde empiezo a aprender sobre el aprendizaje automático si no tengo ningún conocimiento al respecto?

¿Qué debo hacer / investigar antes de ingresar a la universidad con una especialización en Ciencias de la Computación?

Cómo llevar la informática a escala de Internet a todas las empresas del planeta

¿Cuáles son las tres ideas principales en arquitectura de computadoras desde la invención de la computadora?

Si las computadoras reemplazaran a los médicos para el diagnóstico, ¿cree que los pacientes mentirían más / menos / de manera diferente sobre las preguntas médicas?