Buscar en este blog

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


Como su propio nombre indica el ‘multithreading’ (procedente de ‘thread’: hilo, en consecuencia ‘múltiples hilos’) es una técnica muy común en el mundo de la informática que permite ejecutar secuencias de instrucciones (diferentes partes de un programa) de forma simultánea y en paralelo con otras funciones. Dicho de otra manera el multithreading permite ejecutar múltiples subprocesos a la vez (o de forma concurrente). De esta manera se optimizan al máximo los recursos disponibles, ya que se pueden procesar instrucciones de dos o más hilos a la vez utilizando el paralelismo a nivel de hilo (ya hemos visto otro tipo de uso del paralelismo: segmentación). Lo que supone un uso racional y eficiente de los recursos de nuestro ordenador, ya que empleamos los recursos que ya están en uso para una tarea simultánea con una ligera variante de un mismo proceso.

A la tarea de crear un nuevo ‘hilo’ de ejecución dentro de un proceso existente, en vez de empezar un nuevo proceso para una nueva función es a lo que denominamos ‘multithreading’.

Como hemos esbozado al principio los threads o ‘hilos’ son semiprocesos que comparten memoria y datos entre ellos y están caracterizados por un punto definido de comienzo, una secuencia de ejecución y un punto de finalización.

 Así es posible utilizar tareas que se ejecutan en segundo plano, tratar flujos de entrada simultáneos, administrar interfaces de usuario, entre otras cosas.

Por lo tanto algunas de las ventajas del multithreading son: que las aplicaciones tienen un mejor tiempo de respuesta (incluso en máquinas con un solo CPU), que permite que una aplicación utilice varios procesadores simultáneamente y, en definitiva, produce un mejor aprovechamiento del sistema informático.

Otras de las ventajas que se pueden advertir con respecto a la programación secuencial son: la división de las secuencias de instrucciones o tareas en partes más simples, tratando cada una de ellas de forma parcial o completamente en paralelo. También el multithreading aprovecha los tiempos muertos que pueda encontrar en varias sub-fases en la resolución de problemas para construir otra parte del proceso. A lo que se suma que el multithreading es más barato en términos de recursos de sistema utilizados que los sistemas multiproceso.
Para desempeñar de forma óptima su tarea el multithreading utiliza contadores de programas independientes, mecanismos de etiquetado para distinguir las instrucciones de diferentes hilos y un mecanismo que ‘dispara’ el cambio de hilo.

También tendremos que diferenciar el ‘multi-hilo preventivo’ en el que el sistema operativo distribuye el tiempo del proceso entre los hilos y los interrumpe a intervalos regulares para dar paso al siguiente en la cola (ejemplo: Windows 95/ NT,Unix) y el ‘multi-hilo cooperativo´ en el que cada hilo o thread toma el control de la CPU el tiempo que necesita.

Las tareas que involucran mucha ejecución, las operaciones de matrices, las tareas de procesamiento de señales digitales, los elementos llamados por una aplicación con frecuencia, la validación de datos y los procesos que consumen mucho tiempo de CPU, entre otros, son los más indicados para utilizar los multithreading.

Por este motivo el multithreading juega un papel clave en los procesadores gráficos actuales, ya que es muy sencillo aprovechar los paralelismos. Por ejemplo, en los cálculos que se deben realizar para cada vértice o fragmento, se produce el ahorro de tener que repetir la misma tarea una y otra vez sobre diferentes datos en memoria.


Ejemplo de multithreading en una tarjeta gráfica

Por lo tanto, la capacidad de las GPUs actuales que solucionan cálculos de manera eficaz aprovechando los paralelismos a través del multithreading, no solo se utilizan para generar gráficos sino que se emplean también en complejas operaciones de cálculo científico que se descomponen a la vez en muchos hilos que resuelven dichas operaciones.

 

Algunas de las APIS (application programming interface) como DirectX11 de Microsoft, incluye el multithreading entre sus cualidades, con lo que consigue tasas de frames por segundo (FPS) más rápidos para los juegos, sin perder por ello ningún detalle visual.

No hay comentarios: