2011-01-26 15 views
17

Tengo un procesador de cuatro núcleos con hyper-threading. Cuando uso make -j8 es más rápido que make -j4 (leo el número de núcleos en Java y luego llamo al make -j<number of cores>).¿Por qué hace que -j funcione mejor cuando se pasa un número mayor que la cantidad de núcleos disponibles?

No entiendo por qué make -j32 es más rápido que make -j8 cuando tengo (lea en Java) solo 8 núcleos (el hyper-threading duplica la cantidad de núcleos físicos). ¿Cómo es eso posible?

Respuesta

19

La velocidad de la CPU y el número de núcleos disponibles son mayores: el ancho de banda del disco y la banda de memoria también son importantes.

En su caso, imagino que cada hermano de la CPU HT tiene aproximadamente 4 procesos para ejecutar. Cuando comienza uno, bloquea en disco IO y pasa al siguiente proceso. El segundo intenta abrir un segundo archivo, bloques en el disco IO, y el hermano pasa al siguiente proceso. Comenzar cuatro compiladores antes de que el primer disco IO esté listo no me sorprendería.

Por lo tanto, cuando el primero lea en la fuente del programa, el compilador debe comenzar a buscar en los directorios para encontrar los # archivos incluidos. Cada uno requiere algunas llamadas abiertas() seguidas de llamadas de lectura(), todas las cuales pueden bloquearse, y todas ellas renunciarán al hermano para que se ejecuten otros procesos.

Ahora multiplique eso por ocho hermanos: cada núcleo HT se ejecutará hasta que bloquee el acceso a la memoria, en ese punto se intercambiará con el otro hermano y se ejecutará durante un tiempo. Una vez que la memoria del primer hermano ha sido captada en la memoria caché, es probable que sea hora de que el segundo hermano se bloquee mientras espera la memoria.

Existe un límite superior en cuanto a la velocidad con la que puede ejecutar sus compilaciones utilizando make -j, pero el número de dos veces de la cpus ha sido un buen punto de partida para mí en el pasado.

1

Iniciar más procesos todavía puede ofrecerle ventajas. Por ejemplo, un proceso puede usar la CPU mientras otro proceso en la misma CPU está esperando el archivo

Cuestiones relacionadas