El multithreading consiste en ejecutar al mismo tiempo dos o más threads de un programa, permitiendo que cada uno de estos threads sea planificado de la manera más conveniente en el procesador, es decir, aprovechando al máximo todos los recursos disponibles. Sería equivalente a tener dos o más procesadores lógicos o virtuales en lugar de sólo uno.
Esta técnica tiene una serie de ventajas con respecto a la programación secuencial:
Divide el problema en partes más simples, siendo tratada parcial o completamente en paralelo.
En las modernas arquitecturas multiprocesadoras, una aplicación Multithreading (MT) puede aprovecharse de la posibilidad de usar más procesadores para resolver el mismo problema.
Un programa Multithreading aprovechará los tiempos muertos que pueda encontrar en varias subfases de solución de problemas para construir otra parte del proceso.
El Multithreading es más barato en términos de recursos de sistema utilizados que los sistemas multiproceso.
Por tanto podemos concluir que se aumenta la productividad, es decir, que permite conseguir que más trabajo sea terminado en menos tiempos y consumiendo menos recursos.
Clasificación
En función de la implementación de los hilos tenemos dos tipos de MT, el multithreading preventivo, en el que el S.O distribuye el tiempo de proceso entre los hilos y los interrumpe a intervalos regulares para dar paso al siguiente en la cola, y el multihilo cooperativo, en el que cada hilo toma el control de la CPU el tiempo que necesite.
Otra clasificación de MT podría ser entre explícito e implícito. El MT explícito es especificado por el programador, los hilos son generados por el S.O, y el cambio de hilo se produce de manera automática por el procesador debido a una política de cambio implementada que puede ser de tres tipos(Interleaved Multithreading (IMT), Blocked Multithreading(BMT) y Simultaneous Multithreading (SMT).
En cambio, en el modelo implícito se obtienen hilos del mismo proceso en tiempo de ejecución.
Hasta ahora, la técnica de multithreading más utilizada ha sido el SMT (Symmetric MultiTrheading) o Hyperthreading, que consiste en permitir que se emitan en el mismo ciclo instrucciones que pertenecen a distintos hilos de ejecución o threads. De momento todas las implantaciones han permitido ejecutar simultáneamente instrucciones de 2 threads diferentes.
Los threads comparten los recursos del procesador de formas diferentes:
Recurso replicado: Cada thread tiene el suyo propio.
Contador de programa.
Registros de control.
Pila.
Recurso repartido: Existe un único recurso que se divide de manera estática entre todos los threads.
Buffer de reordenamiento.
Cola de planificación.
Buffers de load/store.
Recurso compartido: Existe un único recurso que se comparte de manera dinámica entre todos los threads según la planificación.
Unidades de ejecución.
Registros de propósito general.
Memorias caché.
Esta tecnología consiste en simular dos procesadores lógicos dentro de un único procesador físico. El resultado es una mejoría en el rendimiento del procesador, puesto que al simular dos procesadores se pueden aprovechar mejor las unidades de cálculo manteniéndolas ocupadas durante un porcentaje mayor de tiempo. Esto conlleva una mejora en la velocidad de las aplicaciones que según Intel es aproximadamente de un 30%.
El tipo de aplicaciones que se pueden beneficiar es lógicamente muy amplio, pues aprovechar la tecnología simplemente va a depender del modo en que se creen las aplicaciones. Obviamente, todo lo relacionado con multimedia será lo más beneficiado (juegos, incluidos) de cara al usuario final.
El procesador Intel Pentium Extreme Edition combina la tecnología Hyperthreading con el procesamiento de doble núcleo para ofrecer PCs capaces de gestionar cuatro subprocesos de software. La tecnología HT permite que los entusiastas de los juegos puedan disfrutar de los nuevos juegos y experimentar efectos ultrarrealistas y capacidad de juego. Los entusiastas de la multimedia pueden crear, editar y codificar archivos de gráficos exigentes mientras ejecutan el antivirus en el segundo plano.
Los sistemas operativos que actualmentesoportan Hyper-Threading incluyen Microsoft Windows NT 4.0, Microsoft Windows 2000, Microsoft XP Profesional, y la mayoría de las variantes de Unix.
Como novedad de última hora, decir que Windows 7 está siendo optimizado para hacer mejor uso de esta tecnología y distribuir de forma más eficiente la carga del sistema entre los núcleos virtuales, lo que le daría un salto en rendimiento en procesadores con Hyperthreading, aunque esto depende mucho de lo optimizadas que estén las aplicaciones que deseemos correr.
Las pruebas de rendimiento a las que han sido sometidas aplicaciones que aprovechan esta tecnología ofrecen pequeños incrementos de rendimiento general, aunque dependiendo del tipo de aplicaciones, la mejora puede llegar a ser importante.
En cuanto a los juegos, se habla de un incremento de hasta un 20% en el número de frames por segundo en Quake ejecutándose en un equipo con un P4 H.T. a 3,06GHz con una tarjeta gráfica de última generación (las comparaciones se realizan activando o desactivando el soporte H.T. en la BIOS del equipo).
Gigathread:
Aunque el threading en el contexto del renderizado 3D no es exactamente el mismo que para las CPUs, la premisa básica es similar; hacer uso del increible paralelismo inherente a una GPU moderna mediante la división eficiente del trabajo. Sin embargo, además de dividir el trabajo en tareas individuales o hilos, las GPUs manejan el threading por si mismas, dividiendo los datos que van a ser renderizados en lotes de pixels que pueden ser enviados donde quiera que se necesiten en la GPU.
Con esta tecnología, la potente arquitectura multithread admite miles de subprocesos simultáneos e independientes, lo que proporciona una extraordinaria eficacia de procesamiento en programas de sombreado avanzados de última generación.
No hay comentarios:
Publicar un comentario