performance compilation hyperthreading

performance - ¿Impacto del hyperthreading en el rendimiento del compilador?



compilation (2)

Compilando coreutils-8.4 en Ubuntu 8.04 x86

Intel Atom 1.6 GHz con HT habilitado:

~/coreutils-8.4$ make clean > /dev/null ~/coreutils-8.4$ time make > /dev/null real 2m33.375s user 2m22.873s sys 0m10.541s ~/coreutils-8.4$ make clean > /dev/null ~/coreutils-8.4$ time make -j2 > /dev/null real 1m54.707s user 3m26.121s sys 0m13.821s ~/coreutils-8.4$ make clean > /dev/null ~/coreutils-8.4$ time make > /dev/null real 2m33.372s user 2m22.753s sys 0m10.657s ~/coreutils-8.4$ make clean > /dev/null ~/coreutils-8.4$ time make -j2 > /dev/null real 1m54.851s user 3m26.145s sys 0m13.685s ~/coreutils-8.4$

Por lo tanto, Hyper-Threading reduce el tiempo de ejecución al 75%, lo que equivale a un 33% más de potencia de procesamiento . (Los ejecuté dos veces para asegurarme de que todo está en el caché de memoria).

Y aquí hay un experimento de control para mostrar que make -j2 solo no mejora la velocidad para compilar coreutils-8.4 en Ubuntu 8.04 x86

VM de núcleo único 2 Quad de 2,5 GHz (sin HT):

~/coreutils-8.4$ make clean > /dev/null ~/coreutils-8.4$ time make > /dev/null real 0m44.453s user 0m38.870s sys 0m5.500s ~/coreutils-8.4$ make clean > /dev/null ~/coreutils-8.4$ time make -j2 > /dev/null real 0m45.131s user 0m40.450s sys 0m4.580s ~/coreutils-8.4$ make clean > /dev/null ~/coreutils-8.4$ time make > /dev/null real 0m44.621s user 0m39.090s sys 0m5.340s ~/coreutils-8.4$ make clean > /dev/null ~/coreutils-8.4$ time make -j2 > /dev/null real 0m45.165s user 0m40.390s sys 0m4.610s ~/coreutils-8.4$

Digamos que queremos compilar un proyecto grande (por ejemplo, GCC o el kernel de Linux) lo más rápido posible. ¿Una CPU con capacidad de hyperthreading (por ejemplo, un Intel Core i7) ejecuta el compilador más rápido con hyperthreading habilitado o deshabilitado? ¿Hay algún punto de referencia publicado que pruebe esto?

Mi comprensión del hyperthreading es que cada núcleo puede seleccionar instrucciones de dos (o más procesos). Esto generalmente hace que el núcleo sea más eficiente, ya que es menos probable que las unidades funcionales estén inactivas. Sin embargo, existe la posibilidad de una penalización en el rendimiento, ya que los procesos que se ejecutan en los mismos recursos compartidos del núcleo, como el caché, pueden interferir entre sí. Si el rendimiento aumenta o no depende de la carga de trabajo.

Entonces, para una carga de trabajo del compilador, ¿aumenta el rendimiento? Si es así, por cuánto?


Todo depende de si el compilador está escrito para ser multihilo o no. Si es así, definitivamente el hyperthreading acelera un poco las cosas, ya que entonces el sistema operativo puede programar diferentes partes de los hilos del compilador en diferentes núcleos. Estoy de acuerdo con Ken en que las compilaciones generalmente están más vinculadas a la E / S que al procesamiento intensivo, por lo que contar con un disco duro rápido sería más necesario que un procesador rápido con cientos de núcleos.