Me he dado cuenta, que la mayoría de aplicaciones, no son capaces de explotar las ventajas arquitectónicas que aporta la tecnología hyperthreading disponible en los Pentium 4 de Intel.

Hyperthreading duplica algunos componentes de la ALU del procesador, de manera que a nivel lógico es como si hubiera presentes dos procesadores.

A nivel físico no hay dos CPU, pero la duplicación de hardware permite que con este truco podamos obtener mayor rendimiento que si tuviéramos solamente una CPU sin hyperthreading, y evidentemente menor que si tuviéramos dos procesadores realmente.

Por lo que he visto según el administrador de tareas de Windows, en pocos casos el uso de CPU supera el 50%, lo que indica que la mayoría de aplicaciones no están escritas para explotar la ventaja de Hyperthreading.

Sin duda me recuerda a casos como la aparición de el 386 que necesitó 5 años para que el software pudiera explotar los 32 bits, el Pentium que necesitó 2 años para que las aplicaciones empezaran a optimizarse para utilizar las instrucciones RISC, el Pentium 4 que necesitó 1 año para ser realmente más rápido que un Pentium III, …

Es una situación similar a la que vivimos con los procesadores AMD de 64 bits. Si el software no explota esas características, es como si no las tuviéramos.

Me parece especialmente grave en el caso de hyperthreading, ya que no hablamos de generar un conjunto de instrucciones totalmente diferente (que requiere cambios profundos en el generador de código del compilador), sino solamente de explotar las características multihilo de los sistemas operativos multitarea actuales diseñando la arquitectura de la aplicación de forma adecuada para ser paralelizable al máximo con diferentes hilos (CreateThread).

Como pasó cuando se comenzó a crear aplicaciones para modo protegido bajo DOS, o a explotar la arquitectura RISC del Pentium, el beneficio de los diferentes hilos de ejecución, es algo que no solamente beneficia a los procesadores con Hyperthreading. También sacan provecho aquellos con máquinas multiprocesador, y en general todos los usuarios que pueden ver como el sistema operativo explota las características de planificación de tareas de ejecución para cada thread.

Todo ello con un único coste: conocimiento. No es sencillo diseñar los procesos que pueden ejecutarse con diferentes hilos, ni mucho menos adaptar el algoritmo para que sea posible hacerlo de esta forma. Tampoco es trivial la sincronización y el acceso a zonas comunes entre los diferentes hilos. Pero sin duda vale la pena.

Por citar tan solo algunos ejemplos de aplicaciones que sorprendentemente no explotan esta característica: Flash y Dreamweaver de Macromedia; Word, Excel e Internet Explorer de Microsoft, …

Como veis, la excepción son los que si que lo emplean.