10 noviembre 2010

Tema 2. Utilización del multithreading en las arquitecturas para gráficos y multimedia



                   El multhreading es la capacidad del Sistema Operativo de ejecutar las diferentes partes de un programa (threads o hilos) simultáneamente. En sistemas operativos, un thread es similar a un proceso en que ambos hilos representan una secuencia simple de instrucciones ejecutada en paralelo con otras secuencias. Los hilos nos permiten dividir un programa en dos o más tareas que corren simultáneamente, por medio de la multiprogramación.

                    Un ejemplo de la utilización de hilos es tener un hilo atento a la interfaz gráfica (iconos, botones, ventanas), mientras otro hilo hace una larga operación internamente. De esta manera el programa responde de manera más ágil a la interacción con el usuario. También pueden ser utilizados por una aplicación servidora para dar servicio a múltiples clientes.


                   Esta capacidad del S.O. se traduce en contadores de programa independientes, mecanismos de etiquetado para distinguir las instrucciones de cada diferente thread y mecanismos para cambio de hilo.

Las ventajas con respecto a la programación secuencial son significativas:

- Divide el problema en partes más simples, siendo tratadas parcial o completamente en paralelo.
- En las arquitecturas multiprocesadoras modernas, una aplicación Multithreading (MT) puede aprovecharse de la posibilidad de usar más procesadores para resolver el mismo problema.
- Un programa MT aprovecha los tiempos desocupados del procesador en varias sub-fases de solución de problemas para construir otra parte del proceso.

En función de la implementación de hilos, existen el multihilo preventivo, en el que el S.O. distribuye el tiempo de proceso entre threads y los interrumpe a intervalos regulares para dar paso al siguiente en la cola; y el multihilo cooperativo, en el cual cada hilo toma el control de la CPU el tiempo que necesite.

                    También podemos clasificar en multihilo explícito, especificados por el programador, creados por el S.O. y el cambio de hilo se produce de manera automática según la política de cambio. En el multihilo implícito se obtienen hilos del mismo proceso en tiempo de ejecución.




HyperThreading


                   La tecnología HyperThreading es un diseño de la empresa Intel que sirve al software programado para ejecutar múltiples hilos y procesar los hilos en paralelo dentro de un único procesador, incrementando el uso de las unidades de ejecución del procesador. Esta tecnología consiste en usar dos procesadores lógicos (que no es tangible, solo es emulado) dentro de un único procesador físico, el resultado es una mejoría en el uso del procesador, ya que al simular dos procesadores puede aprovechar mejor los recursos del procesador y por lo tanto una mejora en la velocidad de las aplicaciones. Según la propia Intel la mejora que se obtiene es aproximadamente de un 30%.


Procesador Core Duo SIN Hyperthreading,
ejecutando dos hilos, uno en cada núcleo

Hyper-threading: duplicando recursos del procesador y
compartiendo otros, se ejecuta simultánemente todo en un núcleo,
liberando el otro núcleo y mejorando la eficiencia del sistema.


                   Es importante conocer que las aplicaciones que pretendan aprovechar la capacidad de la tecnología HyperThreading deben haber sido programadas para utilizar múltiples hilos de lo contrario no se conseguirá el paralelismo en la ejecución que se pretende.

                    Resumiendo, hyperthreading le hace creer al usuario mediante el sistema operativo que tiene dos microprocesadores cuando en realidad tiene montado un único microprocesador. Simula una placa madre con doble microprocesador. Esto permite procesar tareas más rápido, la velocidad aumenta pero un usuario final notará una mejora de un 20%.

                    La diferencia entre HyperThreading y un procesador Dual Core, es que el segundo si presenta dos núcleos en un encapsulado, ya que el HyperThreading sólo emula dos procesadores mediante hilos en paralelo dentro del procesador.



Multithreading en consolas

                    La evolución de los microprocesadores está cambiando, ya no se evoluciona creando procesadores con mayor frecuencia de calculo, sino que se crean varios nucleos que trabajan en paralelo. Esta mejora ha llegado al mercado de las arquitecturas para videoconsolas.


- Xbox 360: La CPU Xenon con la que cuenta la consola de Microsoft cuenta con tres núcleos de PowerPC los cuales permiten hyperTreading. Asi pues con 3 procesadores con 2 threads por hardware tenemos hasta 6 unidades de ejecución en paralelo.

Para sacarle el máximo partido a este procesador debemos tener como mínimo dos threads:
Host thread: De propósito general y control del resto de los threads.
Data Generation Thread: Generan las listas de vértices que debe procesar la GPU.


- PlayStation 3: Esta consola cuenta con la potente CPU Cell, la cual se compone de un procesador principal (PPU) + siete procesadores de cálculo (SPU), uno de ellos deshabilitado. Teniendo así 7 unidades de ejecución en paralelo.

En este caso también es el procesador principal el que se encarga de repartir el trabajo entre los procesadores para que trabajen en paralelo.

                    Es necesario adaptar las técnicas de programación actuales para sacar provecho de la concurrencia y adaptar el motor de un videojuego a estas nuevas técnicas. El objetivo es:
- Descomponer el trabajo realizado a lo largo de un fotograma en muchas tareas pequeñas.
- Conseguir una aplicación escalable a n núcleos
- Portabilidad siempre interesante

El nuevo paradigma es difícil de llevar a cabo con los lenguajes de programación actuales, y C++ sigue siendo el principal lenguaje ara crear videojuegos.

Las arquitecturas diseñadas son complejas y con un alto riesgo, tanto que la primera generación de juegos para Xbox 360 solamente empleaba uno de los núcleos.



Más información:
http://www.wikipedia.org La encliclopedia online


No hay comentarios:

Publicar un comentario