TIPOS DE PROCESAMIENTOS El desempeño de un computador puede tener diferentes medidas de elección para diferentes usuarios. Para un usuario individual que está ejecutando un único programa, la computadora con mayor rendimiento es aquella que complete la ejecución de su programa en menor tiempo. Sin embargo, para el administrador de un centro de cómputos, que tiene múltiples tareas que realizar a la vez, la de mayor rendimiento es la que le realice más tareas en menor tiempo. Como elemento común, sin embargo, se evidencia que la medida del rendimiento del computador es el tiempo. La computadora que ejecute los programas en menor tiempo es la que tiene mejor rendimiento. Medida de rendimiento La medida del rendimiento de interés en la computadora es el tiempo. Sin embargo, podemos identificar diferentes medidas de tiempo. Por ejemplo, el tiempo de ejecución de programas por parte del CPU, puede descomponerse en tiempos de usuario (en que ejecuta los programas de los usuarios) y el tiempo de sistema operativo. También podemos identificar otros tiempos que están ligados con los otros componentes del sistema de cómputo: el tiempo requerido para realizar intercambio de datos con la memoria o con diferentes dispositivos de entrada-salida que tienen muy diversas velocidades. Dadas las diferencias e inexactitudes que considerar todos los tiempos posibles, puede acarrear, se toma como la medida de rendimiento más adecuada del computador al tiempo de ejecución t de un programa por parte del CPU. Métricas de desempeño Para poder evaluar el desempeño de un sistema de cómputo y poder comparar dos sistemas en función de su rendimiento, necesitamos establecer métricas que nos permitan estandarizar las medidas que emplearemos para tales fines. Una métrica es un criterio para evaluar el desempeño de un sistema de cómputo de forma general, de manera que mediante el valor de tal métrica podamos comparar dos sistemas disímiles. Todas las métricas de desempeño están basadas en el comportamiento del sistema durante el tiempo, dado que el tiempo es la medida básica de rendimiento. Existen tres clases de métricas que pueden denominarse externas, pues pueden percibirse por un usuario o entidad externa al sistema medido: Latencia o tiempo de respuesta. Productividad Disponibilidad Existe una cuarta clase de métrica de tipo interna o que se percibe desde dentro del sistema. Es la métrica de utilización. Esta última es de vital importancia para entender el sistema y predecir su desempeño en condiciones específicas.
La latencia es una medida del tiempo que el sistema tarda en producir resultados. Esta métrica puede conducir a diferentes medidas de tiempo en dependencia del contexto, por ejemplo, en la evaluación del desempeño del CPU, tenemos los ciclos de reloj requeridos para completar un programa, el ancho del pulso o período del reloj del CPU, etc. En la evaluación del rendimiento de la memoria, tenemos como métrica el tiempo de acceso a una celda. La productividad o throughput (_) como métrica de rendimiento, es la cantidad de trabajos o tareas completadas por unidad de tiempo. A diferencia del tiempo de ejecución que mide directamente el rendimiento del CPU, la productividad depende de diferentes factores externos y circunstanciales (acceso a disco, algoritmo de scheduling, entre otros) y mide un rendimiento más global del sistema. La disponibilidad mide cuánto tiempo un sistema se mantiene en operación normal del tiempo total requerido. La utilización es el fragmento de tiempo que un componente del sistema (CPU, disco, memoria, etc) está activo para su utilización o contribuye al trabajo. La utilización se tasa en el rango entre 0 y 1. La productividad máxima de un sistema se alcanza cuando el componente más ocupado logra una utilización de 1 ó 100%. Aunque las métricas nos permiten contar con un criterio de comparación genérico, muchas veces es difícil definir métricas que sean efectivas 100% o estén libres de errores en los procedimientos o casos de aplicación. Consideraciones de efectividad-costo En la evaluación de computadoras, también puede ser necesario considerar los costos. Normalmente interesa el costo de adquisición, la tasa de retorno de la inversión y el costo total de pertenencia. La historia muestra proyectos costosos, donde se busca a ultranza lograr el mayor poder de cálculo con el mejor rendimiento. En otro caso extremo tenemos a los proyectos donde el menor precio posible es la meta. Aunque el rendimiento sí cuenta, se puede renunciar a ciertos beneficios en función de obtener un equipo de bajo costo para un mercado con baja exigencia. Quizás el mayor trabajo para alguien consiste en alcanzar el mayor rendimiento posible al menor costo. INTRODUCCIÓN AL PARALELISMO Debido a la interrelación de los factores que determinan el tiempo de ejecución y a las limitaciones propias de la arquitectura secuencial, existe una máxima aceleración que se puede lograr en el tiempo de ejecución. Cuando se requiere mayor desempeño, no queda otro camino que mejorar la arquitectura introduciendo paralelismo. Por ejemplo, es posible que una persona no puede ser más rápida en ejecutar una tarea por mucho que se esfuerce, sin embargo, quizás dos personas sí puedan hacerlo si comparten el trabajo.
En computación se ha evidenciado, desde sus inicios, una necesidad y tendencia hacia el paralelismo: Se requiere cada vez más poder de cómputo y además concurrencia (datos compartidos). Desde la introducción de las primeras enormes y costosas máquinas se requirió capacidad de atención a múltiples usuarios para que fueran costo-efectivas. Los dominios de aplicación se han ido ampliando cada vez más: desde un procesamiento de datos se ha pasado a un procesamiento de información, de conocimiento y últimamente se habla de inteligencia. Los avances continuos en tecnología de producción de hardware a gran escala facilitan la producción de sistemas paralelos a menor costo. Procesamiento paralelo El procesamiento paralelo es una forma eficaz de procesamiento que favorece la explotación de los sucesos concurrentes en un sistema de computación. Esta concurrencia implica simultaneidad, solapamiento y multiplicidad de recursos. El paralelismo que involucra solapamiento se denomina temporal porque permite la ejecución concurrente de sucesos sobre los mismos recursos en intervalos intercalados de tiempo. El paralelismo que permite simultaneidad real sobre múltiples recursos al mismo tiempo se denomina paralelismo espacial. Diferentes mecanismos y técnicas de mejora del desempeño empleadas A medida que se fueron evidenciando las necesidades y requerimientos de mayor poder de cómputo y rendimiento en los sistemas se fueron implementando una serie de técnicas y mecanismos de mejora del desempeño que introducen algún nivel de paralelismo que han ido evolucionando y consolidándose permitiendo los niveles de rendimiento que tenemos en las computadoras hoy día: Multiprogramación y tiempo compartido Esta es una técnica de software introducida por los diseñadores de sistemas operativos para implementar paralelismo temporal en la ejecución de múltiples procesos de usuarios y los mismos procesos del sistema operativo, logrando que todos progresen a la vez. La multiprogramación permite tener múltiples procesos en memoria y sólo realiza cambio de contexto con los procesos de house keeping de sistema o cuando el proceso se bloquea en espera de un servicio. El tiempo compartido es más dinámico en el sentido que asigna un quantum de tiempo de CPU a cada proceso. Solapamiento de las operaciones CPU y E/S Mecanismos de mejora del sistema de entrada/salida que permite liberar al CPU de las operaciones de entrada salida, permitiéndole ejecutar otras operaciones. Este mecanismo requiere la introducción de procesadores auxiliares para la transferencia de entrada salida a Memoria: controlador DMA, Canales de E/S y controladores de E/S inteligentes.
Jerarquización y equilibrio de ancho de banda Las diferencias de velocidad entre diferentes componentes del sistema afectan el desempeño global del mismo por los cuellos de botella que los dispositivos más lentos imponen en las transferencias entre ellos. La jerarquización de diferentes niveles y la introducción de niveles intermedios que reduzcan la brecha de velocidad, permite ir equilibrando el ancho de banda del sistema y acelerar su rendimiento global. En el sistema de memoria contamos con la jerarquía de memoria y en los sistemas de entrada salida con técnicas de compensación con la jerarquización de buses y técnicas de buffering en los módulos de entrada/salida. Solapamiento de la ejecución y Segmentación encauzada El modelo de ejecución de las máquinas secuenciales puede ser ineficiente en cuanto al nivel de utilización de los componentes internos del CPU, al ocupar todos los recursos en el ciclo de instrucciones completo. Un análisis de las fases y etapas del ciclo nos permiten identificar diferentes tareas que podrían solaparse. Por ejemplo, la fase fetch solo se encarga de traer la próxima instrucción. Finalizada la fetch, el PC no vuelve a utilizarse hasta la próxima fase fetch. Entonces, podría considerarse que cuando se complete la traída de la instrucción i, una parte dedicada del CPU puede ir a traer la siguiente instrucción i+1, mientras el resto ejecuta la instrucción i. Cada parte o sección del CPU se denomina en este caso etapa o segmento del cauce de ejecución o pipeline, porque la salida de cada etapa anterior alimenta la entrada de la siguiente como si estuvieran conectados en una tubería. Por eso la implementación de tal solapamiento de la ejecución en el CPU se denomina segmentación encauzada. El ejemplo de segmentación mostrado en este párrafo solo consta de dos etapas y se le conoce como precarga de instrucciones (prefetching), sin embargo los sistemas segmentados hoy día suelen tener muchas más etapas de cauce. La técnica de solapamiento de la ejecución, permite reducir considerablemente el tiempo de ejecución. Adicionalmente, los sistemas de acceso a memoria también han implementado un modelo de solapamiento en los ciclos de máquina de acceso a memoria, permitiendo reducir grandemente el tiempo de respuesta global del sistema. SEGMENTACION LINEAL La ejecución secuencial de instrucciones es muy lenta. Hemos expuesto que las mejoras en tiempo de ejecución están limitadas por la interrelación entre las variables de la definición del tiempo de ejecución secuencial t, que depende del número de instrucciones ejecutadas N, el número promedio de ciclos de reloj consumidos por cada instrucción CPI y el período de reloj del CPU. Existe alguna posibilidad de ejecución para aumentar el rendimiento reduciendo el tiempo de ejecución? Pues sí: aplicar técnicas de paralelismo. Una de las técnicas de paralelismo
más empleadas por ser implementadas a lo interno del procesador es la segmentación encauzada o pipelining en lengua inglesa. Se ha anotado que existen dos tipos de segmentación: la lineal y la no-lineal. La segmentación encauzada es una técnica de implementación que consiste en solapar la ejecución demúltiples instrucciones en el tiempo. Eso significa que no se requiere esperar hasta que la i-ésma instrucción concluya para comenzar a ejecutar la i+1-ésima instrucción. Hoy en día, la segmentación es clave en la implementación de CPUs rápidos. Cabe mencionar que la segmentación también se emplea en la construcción de unidades aritméticas. La segmentación es similar a una línea de producción en serie o cadena de ensamblaje: la cadena se compone de una serie de fases o etapas consecutivas de producción que son necesarias para completar el producto o tarea. El producto se construye con diferentes piezas o partes que se ensamblan en cada etapa de la cadena. Cada etapa cuenta con el equipamiento requerido para completar la subtarea que le compete. En cada etapa de la cadena se ensambla una parte o pieza y al final de la misma tenemos el producto completo. La gran ventaja es que no se necesita esperar a que un producto completo esté listo para comenzar a ensamblar el siguiente, sino que apenas una etapa completa su parte del trabajo, la pasa a la siguiente y comienza a procesar su parte correspondiente del siguiente trabajo. Análogamente, en la segmentación encauzada, la ejecución de una instrucción se divide en diferentes fases y el procesador se organiza en unidades o secciones de ejecución relativamente independientes llamadas segmento o etapa. Cada etapa de la segmentación completa o ejecuta una parte de la instrucción. La CPU segmentada trabaja entonces como una línea de producción en serie: La primera etapa carga la primera instrucción y completa su primera fase. Una vez que esta fase ha terminado, pasa su salida a la siguiente etapa y toma la segunda instrucción mientras la segunda etapa ejecuta la segunda fase de la primera
instrucción. Este procedimiento se repite entre las restantes etapas. Cuando la primera instrucción sale de la última etapa, su ejecución está completa. En el siguiente pulso de reloj saldrá la segunda del cauce y así en lo sucesivo. La figura 2.2. muestra el diagrama a bloques cómo se estructura un cauce de instrucciones que opera según lo descrito. Cada etapa, en el gráfico se representa con un bloque verde. Los bloquecitos celestes representan registros de retención que tienen la misión de separar los datos entre etapas, para evitar sobre posición de los mismos, según se explicará posteriormente. Como todas las etapas están conectadas entre sí, todas ellas deben estar listas para proceder al mismo tiempo; es decir, deben estar sincronizadas. El tiempo requerido para desplazar una instrucción, un paso a lo largo del pipeline normalmente se hace corresponder a un ciclo del reloj del procesador (_). La duración de un ciclo máquina, está determinada por el tiempo que necesita la etapa mas lenta, porque todas las etapas deben progresar a la vez. El diseñador debe entonces, equilibrar la duración de las etapas de la segmentación. Si las etapas están perfectamente equilibradas, el ciclo de la máquina segmentada es óptimo porque reduce el gasto por segmentación. El objetivo de la segmentación es conseguir una instrucción por ciclo, aunque cada instrucción por separado ocupe varios ciclos (CPI > 1). La productividad de la segmentación está determinada por la frecuencia con que una instrucción salga del cauce. La segmentación incrementa la productividad de instrucciones de la CPU porque el número de instrucciones completadas por unidad de tiempo se incrementa aunque no reduce el tiempo de ejecución de cada instrucción debido al gasto en el control de la segmentación. El incremento en la productividad de instrucciones significa que un programa corre más rápido y tiene menor tiempo total de ejecución aun cuando ninguna instrucción se ejecute con más rapidez. El cauce de instrucciones mostrado en la figura 2.2. es un cauce lineal porque todas las etapas tiene una relación de precedencia lineal entre ellas. El cauce lineal obliga a todas las instrucciones a atravesar todas y cada una de las etapas del mismo, aunque no la necesite y por tanto todas las instrucciones duran igual tiempo.
Procesador vectorial Un procesador vectorial es un diseño de CPU capaz de ejecutar operaciones matemáticas sobre múltiples datos de forma simultánea, en contraste con los procesadores escalares, capaces de manejar sólo un dato cada vez. La gran mayoría de las CPUs de hoy en día son escalares o superescalares. Los procesadores vectoriales son muy comunes en el área de la computación científica, formando la base de la mayor parte de los supercomputadores durante los años 80 y 90. Sin embargo, parece claro que la mejora de la tecnología y de los diseños de procesadores va a acabar con el uso de procesadores vectoriales como procesadores de propósito general. IBM, Toshiba y Sony han anunciado el procesador Cell, que está formado en parte por procesadores vectoriales. Superescalar Superescalar es el término utilizado para designar un tipo de microarquitectura de procesador capaz de ejecutar más de una instrucción por ciclo de reloj. El término se emplea por oposición a la microarquitectura escalar que sólo es capaz de ejecutar una instrucción por ciclo de reloj. En la clasificación de Flynn, un procesador superescalar es un procesador de tipo MIMD (multiple instruction multiple data). La microarquitectura superescalar utiliza el paralelismo de instrucciones además del paralelismo de flujo, éste último gracias a la estructura en pipeline. La estructura típica de un procesador superescalar consta de un pipeline con las siguientes etapas: lectura (fetch) decodificación (decode) lanzamiento (dispatch) ejecución (execute) escritura (writeback) finalización (retirement) En un procesador superescalar, el procesador maneja más de una instrucción en cada etapa. El número máximo de instrucciones en una etapa concreta del pipeline se denomina grado, así un procesador superescalar de grado 4 en lectura (fetch) es capaz de leer como máximo cuatro instrucciones por ciclo.
PREGUNTAS 1. Defina rendimiento. 2. Explique la importancia del rendimiento en una computadora. 3. Cuál es la función de la métrica de desempeño? 4. Explique cuatro métricas de desempeño de una computadora. 5. Explique la importancia de la relación efectividad-costo. 6. Cuáles son las tendencias del mercado por las que se considera el paralelismo una necesidad en una computadora? 7. Explique con dos ideas procesamiento paralelo. 8. Cuál es la diferencia entre multiprogramación y tiempo compartido? 9. Cuál es la función del solapamiento de las operaciones CPU y E/S? 10. Justifique la solución de las diferencias de velocidad entre diferentes componentes del sistema afectan el desempeño global del mismo por los cuellos de botella que los dispositivos más lentos imponen en las transferencias entre ellos. 11. Escriba dos diferencias entre procesamiento secuencial y segmentación encauzada. 12. Explique con dos ideas el funcionamiento del procesamiento pipelining. 13. Defina que es un procesador vectorial. 14. Qué es? y Cómo funciona? El procesador superescalar.