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.