<< Chapter < Page Chapter >> Page >

Imagine una orquesta sinfónica donde cada músico toque sin tomar en cuenta al director o a lo otros músicos. Al primer movimiento de la batuta del director, cada músico recorre toda su partitura. Algunos finalizan mucho antes que otros, dejan el escenario y se van a casa. La cacofonía resultante no parece música (pensándolo bien, recuerdo algo al jazz experimental), porque carece por completo de coordinación. Por supuesto, esta no es la forma en que se interpreta la música. Un programa de computadora, como una pieza musical, se teje en un telar que lo despliega conforme avanza el tiempo (aunque tal vez lo teje menos compactamente). Ciertas cosas deben suceder antes que otras, y hay una tasa de ejecución para el proceso en su conjunto.

En los programas de computadora, cuando un evento A debe suceder antes de otro evento B, se dice que B es dependiente de A. Llamamos a esta relación entre ellos una dependencia. En ocasiones las dependencias se deben a cálculos o accesos a memoria, en cuyo caso les denominamos dependencias de datos . En otras ocasiones estamos a la espera de que ocurra un salto o la salida de un ciclo, en cuyo caso les denominamos dependencias de control . Cada tipo está presente en cada programa, sólo que en grados distintos. El objetivo es eliminar tantas de ellas como sea posible. Reacomodar el código, de forma que dos segmentos sean menos dependientes entre sí, expone el paralelismo , o las oportunidades de hacer muchas cosas a la vez.

Dependencias de control

Tal como la asignación de variables puede depender de otras asignaciones, el valor de una variable puede depender también del flujo de control del programa. Por ejemplo, una asignación adentro de una sentencia condicional sólo puede ocurrir si la condición se evalúa como verdadera. Lo mismo puede decirse de una asignación al interior de un ciclo; si nunca se entra en dicho ciclo, ninguna sentencia en su interior se ejecutará.

Cuando los cálculos ocurren como consecuencia del flujo de control, decimos que se trata de una dependencia de control , tal como en el código que aparece más abajo y que se explica gráficamente en [link] . La asignación ubicada dentro del bloque condicional puede o no ejecutarse, dependiendo del resultado de la prueba X .NE. 0. En otras palabras, el valor de Y depende del flujo de control en el código a su alrededor. Nuevamente, esto puede sonarle a usted como un asunto que sólo le importa a los diseñadores de compiladores, y no a los programadores, cosa que es mayormente cierta. Pero hay veces que usted deseará mover tales instrucciones dependientes del control, para así quitar del camino costosos cálculos (suponiendo que su compilador no sea lo suficientemente inteligente para hacerlo por usted). Por ejemplo, digamos que [link] representa una pequeña sección de su programa. El flujo de control inicia en la parte superior y avanza a lo largo de dos decisiones. Por otro lado, digamos que hay una operación de raíz cuadrada en el punto de entrada, y que el flujo de control casi siempre inicia en la parte de arriba y baja por la rama que contiene la sentencia A=0.0 . Ello significa que el resultado del cálculo A=SQRT(B) casi siempre se descargará, porque A obtiene un nuevo valor de 0.0 cada vez. Una operación de raíz cuadrada siempre es "cara", porque toma mucho tiempo en ejecutarse. El problema es que usted no puede simplemente quitarla de ahí, puesto que ocasionalmente se requiere. Sin embargo, puede quitarla del camino y continuar observando las dependencias e control, haciendo dos copias de la operación de raíz cuadrada a lo largo de la bifurcación menos recorrida, como se muestra en [link] . De esta forma el código SQRT sólo se ejecutará a lo largo de tales rutas cuando realmente se requiera.

Get Jobilize Job Search Mobile App in your pocket Now!

Get it on Google Play Download on the App Store Now




Source:  OpenStax, Cómputo de alto rendimiento. OpenStax CNX. Sep 02, 2011 Download for free at http://cnx.org/content/col11356/1.2
Google Play and the Google Play logo are trademarks of Google Inc.

Notification Switch

Would you like to follow the 'Cómputo de alto rendimiento' conversation and receive update notifications?

Ask