domingo, 16 de marzo de 2008

QuadCores y multithreading en Windows XP. Aplicación Single Threaded.

Windows XP SP2 soporta nativamente los actuales procesadores AMD Phenom e Intel Core2Quad, ambos de ellos con cuatro nucleos de procesamiento. La pregunta que muchos se plantean es: ¿Está realmente optimizado su rendimiento? Aquí intentaré responderla y dar algunas claves para aumentar la efectividad de los micros Quad Core sean estos Intel o AMD.

Equipo Quad Core en el Administrador de Tareas de WinXP.
 
El administrador de tareas de Windows XP SP2 (Professional en este caso) es una importante herramienta en la optimización de este tipo de sistemas. Avanzándonos un poco, podemos decir que Windows XP, no sin buena voluntad, intercambia los threads entre núcleos sin un orden muy concreto ni coherente, generando con ello varios problemas.

Intel Core 2 Quad 6600 vs. AMD Phenom 9600 Black Edition

Sistema Intel:
  • Core 2 Quad 6600. Núcleo Conroe, stepping G0 (2.4GHz 2*4MB L2 / 266 QPB FSB)
  • Placa base Gigabyte GA-P35 DS3R rev3.1
  • 2*1GB Kingston HyperX DDR2 800 @ 5 6 6 18 2T (SPD)
Sistema AMD:
  • Phenom 9600 BE stepping B2. Núcleo Barcelona (2.3GHz 4*512KB L2 / 1.8GHz NorthBridge y 2MB L3, HT3 3.6 GHz).
  • Placa base Gigabyte GA-MA770DS3.
  • 2*1GB Kingston HyperX DDR2 800 @ 5 5 5 18 1T (SPD).
  • TLB Patch deshabilitado.
  • Controladoras de memoria Unganged.
  • Driver CPU AMD Phenom instalado. Descarga.
  • El resto de componentes es irrelevante para el resultado e identico en ambos sistemas.

Cálculo SuperPi mod1.5 XS 1M. Descarga.

SuperPi mod1.5 XS

Tiempos en segundos. SuperPi es un benchmark que claramente se ejecuta más rapido en la arquitectura Core2, con la elección de otro test cambiarían los resultados.


Tiempos de cálculo con el sistema por defecto.

T1, T2, ... T6 son las seis ejecuciones del test, siendo MED la media de los resultados. Como vemos, consistentemente acaba antes el cálculo el Core2Quad y por un buen margen, pero aquí no quiero resaltar diferencias de rendimiento entre las dos arquitecturas sino analizar su comportamiento en XP.

Corriendo el programa por defecto los resultados son:

  • Core2Quad 6600: 22,75s (media)
  • Phenom 9600 BE: 35,65s (media)

Ahora vamos al Administrador de tareas y hacemos click derecho en el ejecutable Super_pi_mod.exe, seleccionamos Establecer afinidad ...

Y nos aparecerá la siguiente ventana, seleccionamos CPU 0 (o cualquier otra), ya que SuperPi es single threaded (es decir, solo utiliza un núcleo), es del año 1995...

Processor Affinity CPU 0.

Los nuevos resultados son:

Tiempos de cálculo asignando manualmente la afinidad.

  • Core2Quad 6600: 21,06s (media)
  • Phenom 9600 BE: 33,85s (media)

Ambos tiempos de ejecución decrecen, claramente aumenta el rendimiento al asignar manualmente los procesos a los núcleos cuando el número de threads es inferior al de procesadores en el sistema. El equipo AMD mejora sus tiempos un 7,5% y el Intel un 5% debido a diferencias arquitecturales.

Conclusiones:

Al asignar manualmente los recursos físicos a las aplicaciones que no utilizan los cuatro núcleos podemos fácilmente aumentar el rendimiento de nuestra aplicación favorita. Y no solo eso, además conseguimos una excelente repetitividad de los resultados (desviaciones standard bajas) consiguiendo una buena trazabilidad y ahorrándonos tiempo de testeo.

Intel Core2Quad. Dos dies Conroe cada uno de ellos con 4MB de L2. Las dos cachés L2 de 4MB son independientes. Podemos diferenciar dos casos asignando la afinidad manualmente:

  • Datos compartidos entre core0 y core1 o core2 y core3. Los datos de la aplicación se cachean en la L2 compartida y se intercambian con latencias muy bajas entre los dos núcleos (del orden de 14 ciclos). La caché efectiva son 4MB.
  • Datos comunes entre núcleos que no comparten caché L2, por ejemplo Core0 y Core 3. Los datos de la aplicación se cachean en ambas L2 de 4MB (siendo el tamaño efectivo igualmente 4MB). La latencia core-core es del orden de 50-60 ciclos. Cuando un núcleo requiere un dato presente el la L2 del otro die debe acceder a él a través del FSB.

AMD Phenom. Un único die monolítico integra los cuatro nucleos y el uncore. Éste último consta principalmente del NorthBridge, la caché L3 de 2MB y 32 vías, las dos controladoras RAM DDR2 de 64bit y el HyperTransport3. Todo ello a una frecuencia inferior a la de los núcleos.

Al asignar SuperPi manualmente al core0, favorecemos los aciertos de caché L2 de este núcleo (las L2 de Phenom ,4 de 512 KB, son 1/8 de las dos del Core2Quad y es exclusiva por núcleo. Dado su pequeño tamaño y menor tasa de aciertos agradece más nuestra ayuda...), no siendole necesario "salir" a L3 o RAM y consiguientemente aumentando el rendimiento.

La penalización es mayor en este caso debido al escaso ancho del bus de L3 (64 bits) y su funcionamiento asíncrono respecto a los procesadores.

Con solo 64 bits AMD ha creado un futuro bottleneck en su arquitectura que si bien ahora no es muy notorio, con el paso a DDR3 y altas frecuencias en el bus de memoria deberán revisar y ampliar. A modo de curiosidad, a 1.8GHz y 64 bits, el ancho de banda (bandwidth) es algo superior a un dual channel DDR2 800.

En un próximo artículo analizaré la dinámica de estos procesadores en situaciones de multithreading con datos compartidos en sus cachés L2 / L3, con interesantes datos de rendimiento. Las aplicaciones seran 7zip (dualthreaded) y WinRar (multithreaded).

Carlos Yus Valero – informaticapremium