2012-08-13 152 views

Respuesta

11

La predicción de derivación se realiza por el procesador para tratar de determinar dónde continuará la ejecución después de un salto condicional, de modo que pueda leer las siguientes instrucciones de la memoria.

La ejecución especulativa va un paso más allá y determina cuál será el resultado de la ejecución de las siguientes instrucciones. Si la predicción de bifurcación fue correcta, se utiliza el resultado; de lo contrario, se descarta.

Tenga en cuenta que la ejecución especulativa se puede aplicar incluso si no hay una rama condicional real en el código. El procesador puede determinar el resultado de varias instrucciones que normalmente se ejecutarían en sucesión, pero la ejecución podría detenerse, por ejemplo, mediante una interrupción de desbordamiento aritmético.

0

Bueno, soy un novato en programación y ciencias de la computación, pero esta es mi conclusión. El propósito de estas dos "técnicas" es mantener la tubería llena, evitando el desperdicio de recursos. Cuando un procesador encuentra una instrucción de prueba condicional, normalmente esperaría que espere hasta que la condición haya sido probada antes de continuar con la siguiente instrucción.

En la ejecución especulativa se ejecutan las instrucciones de todos modos 'esperando' que la prueba condicional sea VERDADERA en lugar de detener la canalización y dañar los recursos. De lo contrario, solo descarta los resultados.

En la predicción de bifurcación, puede ir un paso más allá y predecir si la condición será VERDADERA o no en función de los resultados anteriores de la prueba condicional. (Predice la dirección en que se bifurcará su programa).

Espero que aclare las cosas. Obtuve la información de aquí y un curso que estoy tomando este semestre. http://www.pcguide.com/ref/cpu/arch/int/featSpeculative-c.html

0

Si desea hacer algo especulativamente, aumenta sus posibilidades de que sea útil al predecir con precisión en qué camino especular.

En algunos casos, la predicción es trivial (por ejemplo, predecir que load/stores no segfault). En otros casos, es difícil (predicción de bifurcación).

En cualquier caso, debe ser capaz de revertir/descartar los cálculos especulativos si se produce una excepción.


Es posible especular sin predicción, mediante la ejecución de las instrucciones especulativamente desde ambas direcciones de una rama, y ​​sólo mantener el resultado de la línea que se encontró más tarde que ha sido el camino correcto.

El hardware actual no hace uso de esto para las ramas, pero el mismo tipo de cosas ocurre en una escala local mucho más pequeña para cosas como la decodificación paralela de instrucciones x86. Los decodificadores comienzan a decodificar en cada límite de instrucción posible, y solo descubren cuál posición de inicio fue correcta una vez que la decodificación de la instrucción previa determina la longitud.

Cuestiones relacionadas