Casos Edwin

Páginas: 12 (2943 palabras) Publicado: 25 de junio de 2012
10.4.2 Movimiento de código hacia arriba

Ahora vamos a examinar con cuidado lo que significa mover una operación hacia arriba en un camino. Suponga que deseamos mover una operación del bloque org hacia arriba, por una ruta de flujo de control hasta el bloque dst. Asumimos que dicho movimiento no viola ninguna dependencia de datos, y que hace que las rutas a través de dst y org se ejecuten conmás rapidez. Si dst domina a org, y org posdomina a dst, entonces la operación que se movió se ejecuta sólo una vez, cuando es debido.

Si org no posdomina a dst
Entonces, existe un camino que pasa a través de dst y que no llega a org. En este caso se habría ejecutado una operación adicional. Este movimiento de código es ilegal, a menos que la operación que se movió no tenga efectos adicionalesno deseables. Si la operación que se movió se ejecuta "sin costo" (es decir, si utiliza sólo recursos que de otra forma estarían inactivos), entonces este movimiento no tiene costo. Es benéfico sólo si el flujo de control llega a org.

Si dst no domina a org
Entonces, existe un camino que llega a org sin pasar primero a través de dst. Debemos insertar copias de la operación que se movió a lolargo de dichas rutas. Sabemos cómo lograr exactamente eso debido a nuestra explicación sobre la eliminación de redundancia parcial de la sección 9.5. Colocamos copias de la operación a lo largo de los bloques básicos que forman un conjunto de corte, separando el bloque de entrada de org. En cada lugar en el que se inserta la operación, se deben cumplir las siguientes restricciones:

1. Losoperandos de la operación deben contener los mismos valores que en la operación original.

2. El resultado no sobrescribe un valor que todavía se necesita.
3. La misma operación no se sobrescribe más adelante, antes de llegar a org.

Estas copias hacen que la instrucción original en org sea totalmente redundante y, por lo tanto, puede eliminarse.
Nos referimos a las copias adicionales dela operación como código de compensación. Como vimos en la sección 9.5, pueden insertarse bloques básicos a lo largo de las aristas críticas con el fin de crear lugares para almacenar dichas copias. El código de compensación puede llegar a provocar que algunas rutas se ejecuten con más lentitud. Por ende, el movimiento de código mejora la ejecución del programa sólo si los caminos optimizados seejecutan con más frecuencia que las no optimizadas.
10.4.3 Movimiento de código hacia abajo

Suponga que estamos interesados en mover una operación del bloque org, hacia abajo por un camino de flujo de control hasta el bloque dst. Podemos razonar acerca de dicho movimiento de código en la misma forma que la sección anterior.

Si org no domina a dst

Entonces, existe un camino que llega a dstsin visitar primero a org. De nuevo, en este caso se ejecutará una operación adicional. Por desgracia, el movimiento de código hacia abajo se aplica con frecuencia a las operaciones de escritura, que tienen los efectos adicionales de sobrescribir los valores antiguos. Podemos lidiar con este problema mediante la replicación de los bloques básicos a lo largo de las rutas de org a dst, y colocandola operación sólo en la nueva copia de dst. Otro método, si está disponible, es usar instrucciones predicadas. Protegemos la operación que se movió con el predicado que protege al bloque org. Tenga en cuenta que la instrucción predicada debe programarse sólo en mi bloque dominado por el cálculo del predicado, ya que éste no estará disponible en cualquier otro caso.

Si dst no posdomina a orgComo en la explicación anterior, hay que insertar código de compensación para que la operación que se movió se ejecute en todas las rutas que no visitan a dst. De nuevo, esta transformación es análoga a la eliminación de redundancia parcial, sólo que las copias se colocan debajo del bloque org en un conjunto de corte que separa a org de la salida.

Resumen del movimiento de código hacia arriba...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • edwin
  • Edwin
  • edwin
  • edwin
  • edwin
  • edwin
  • Edwin
  • el edwin

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS