New Devices. tu lugar de actualización.
     

seminario   publicaciones   tutoriales

   

tutoriales

mapa del sitio   @

Bases tecnológicas funcionales de un microprocesador

Condiciones de paralelismo

Condiciones de paralelismo

La forma más efectiva de mejorar el desempeño de los microprocesadores es implementando técnicas de hardware y software que permitan la ejecución de mas de una instrucción en paralelo durante un sólo ciclo de máquina. Las condiciones necesarias para satisfacer lo expuesto son los principios de las técnicas de paralelismo. La cual establecen que dos procesos P1 y P2 pueden ser ejecutados de manera paralela si, y sólo si, se cumplen las condiciones expuestas en la figura 1.5.

Condiciones de paralelismo

Figura 1.5 Condiciones de paralelismo

Todo proceso Pi requiere de parámetros de entrada, cuyo conjunto denotaremos por Ii. Estos parámetros de entrada representan los valores de las variables de entrada relacionadas al proceso. Sin estas variables no es posible que el microprocesador realice su tarea fundamental que es procesar datos. Adicionalmente, la ejecución del proceso genera valores de salida, los cuales son escritos en los registros de propósito general del CPU, posiciones de memoria o puertos. Estos valores corresponden a las variables de salida del proceso Pi cuyo conjunto denotaremos por Oi. Esto implica que dos o más procesos pueden ejecutados en paralelo si y solo si el siguiente grupo de variables de entrada y salida Ii y Oi no dependan entre sí. Cuando esto ocurre se dice que los procesos pueden ser ejecutados en paralelo, lo cual se denota por P1||P2.

Con el fin de demostrar la función de los principios antes expuestos en un sistema microprocesado, analicemos el diagrama de interdependencia de instrucciones que se presenta en la figura 1.6.

Ejecución secuencial y ejecución paralela de instrucciones

Figura 1.6 Ejecución secuencial y ejecución paralela de instrucciones

Este diagrama de interdependencia de instrucciones consta de 5 instrucciones distribuidas de la siguiente manera:

P1 A = C * B

P2 D = A + E

P3 F = A + G

P4 A = H + D

P5 Y = C / E

Si asumimos que cada instrucción tiene un tiempo de ejecución t, el tiempo de ejecución total del programa ejecutado de manera secuencial es igual a 5t; y el tiempo de ejecución del programa aplicando los principios de paralelismo es de 3t.

Las instrucciones P1 || P5 y P5 || P2 pueden ser ejecutados en paralelo. En cambio P1 y P2 no pueden ser ejecutados en paralelo ya que A es la variable de salida del proceso P1 y la variable de entrada del proceso P2.

Con este ejemplo hemos demostrado que el uso de las condiciones de paralelismo antes expuestas nos sirven para incrementar el average de ejecución de instrucciones disminuyendo así el tiempo de ejecución de un programa.

Dependencia entre instrucciones

La ejecución en paralelo de dos o más instrucciones depende de:

-. La dependencia de datos entre instrucciones. Se dice que existe dependencia de datos cuando la ejecución de dos o más instrucciones dependen de los parámetros de entrada o salida de otras instrucciones. La dependencia de datos entre instrucciones puede ser dividida en dos grupos: Dependencia de datos entre instrucciones ejecutadas secuencialmente y dependencia de datos entre las instrucciones que se encuentran en los lazos iteractivos de un programa. Para el caso de dependencia de datos entre instrucciones ejecutadas secuencialmente tenemos tres casos, a saber:

-. Dependencia de Ejecución: Una instrucción P2 es dependiente de la ejecución de otra instrucción P1 si, y sólo si, el resultado de la instrucción P1 es parámetro de entrada de la instrucción P2. Este tipo de dependencia se conoce como dependencia de flujo o dependencia de lectura después de escritura (Read After Write RAW). En el siguiente ejemplo podemos observar dos instrucciones: P1 y P2. El parámetro de salida de la instrucción P1 es utilizado como parámetro de entrada de la instrucción P2 por lo tanto ambas instrucciones no puede ser ejecutadas en paralelo.

P1 ADD r1, r2, r3;

P2 Mul r2, r1, r3;

-. Anti-independencia. Una instrucción P2 es anti-independiente si, y sólo si, la instrucción P2 es ejecutada después de P1 y el parámetro de salida de la instrucción P2 es parámetro de entrada de la instrucción P1. Este tipo de dependencia de datos se conoce como dependencia de escritura después de lectura (Write After Read WAR). En el siguiente ejemplo podemos observar dos instrucciones: P1 y P2. El parámetro de entrada de la instrucción P1 es parámetro de salida de la instrucción P2 por lo tanto la instrucción P2 no puede ser ejecutada en paralelo con la instrucción P1.

P1 ADD r1, r2, r3;

P2 Mul r2, r4, r3;

Este tipo de dependencia de datos puede ser eliminado con la técnica de renombramiento de registros la cual consiste en renombrar el registro del parámetro de salida de la instrucción P2.

-. Dependencia de Salida. Dos instrucciónes son dependientes de salida si, y sólo si, ambas producen una escritura en el mismo registro destino o en la misma dirección de memoria. Este tipo de dependencia de datos se conoce como dependencia de escritura después de escritura (Write After Write WAW). De igual manera este tipo de dependencia de datos puede ser eliminada con la técnica de renombramiento de registros. En el siguiente ejemplo podemos observar dos instrucciones P1 y P2. Donde el registro destino de ambas instrucciones es el mismo.

P1 ADD r1, r2, r3;

P2 Mul r1, r4, r3;

Para el caso de dependencia de datos entre las instrucciones que se encuentran en lazos iterativos de un programa tenemos dos casos, a saber:

-. Dependencia datos entre las instrucciones incluidas en un lazo iterativo. Las dependencias de datos que pueden ocurrir para este caso son RAW, WAR y WAW.

-. Dependencia de datos recurrentes. Se dice que existe dependencia recurrente de datos si en un lazo iterativo se incluye uno o más lazos iterativos y las instrucciones que pertenecen a un lazo dependen de las instrucciones del lazo previo.

-. La dependencia de control. Se dice que existe dependencia de control cuando el orden de ejecución de un programa no puede ser determinado antes de que el mismo sea ejecutado. Un ejemplo de ello es la instrucción condicional de un lenguaje de alto nivel (IF).

-. La dependencia de recursos. Se dice que existe dependencia de recursos cuando dos o más procesos requieren del mismo recurso de hardware a la hora de escribir los resultados de salida de cada proceso.

Anterior  Inicio  Siguiente

© 2002 New Devices. Derechos Reservados.