Estoy interesado en el equilibrio de carga para sistemas de CPU multinúcleo. Si usa 1 CPU con múltiples núcleos, ¿es más eficiente energéticamente equilibrar la carga en varios núcleos, o tratar de llenar núcleos individuales y dejar otros inactivos?
La suposición básica es que la cantidad de trabajo que se realiza en ambos casos es exactamente la misma, al mismo tiempo. Entonces, ¿es más eficiente usar 4 núcleos en la misma CPU con 25% de carga cada uno o 1 núcleo con 100% de carga?
Supongo que 1 núcleo con una carga del 100% debería ser más eficiente, pero como podría estar equivocado, estaba buscando respuestas serias sobre este problema (sin adivinanzas).
cpu-usage
power-consumption
Private_meta
fuente
fuente
Respuestas:
En mi opinión, esta pregunta simplemente no tiene respuesta en el caso general.
En mi escritorio tengo una de estas nuevas CPU Core i7-980x de 6 núcleos habilitadas para TurboBoost. Si carga un solo núcleo en esta máquina, aumentará la velocidad del reloj de ese núcleo, aumentando así el consumo de energía de la CPU, por lo que marcará una gran diferencia. Esta CPU, así como otras CPU más modernas, pueden desactivar parcialmente los núcleos inactivos, lo que aumenta el ahorro de energía. Eso no es tan cierto en los modelos de CPU más antiguos.
Tenga en cuenta que el trabajo que tiene que hacer con un núcleo será necesariamente diferente del trabajo que realiza con múltiples núcleos. Si es el caso de que puede distribuir la carga en múltiples núcleos, encontrará que se dedicará mucho tiempo adicional al núcleo único que realiza costosos cambios de contexto, y su rendimiento se verá afectado.
De todos modos, el problema tiene demasiadas variables para responder realmente. Uno podría seguir y seguir sobre los diferentes tipos de cargas, y cualquiera que intente comparar para obtener una respuesta terminará (probablemente inadvertidamente) haciendo comparaciones de manzanas con naranjas que no se aplican en otros casos de uso.
Ah, y una cosa más. La mayoría de las personas probablemente citarán la eficiencia en términos de poder . No quieres caer en esa trampa. Dado que el tiempo para procesar las cargas será necesariamente diferente dependiendo de cómo se equilibren las cargas, debe integrar el resultado a lo largo del tiempo para encontrar la cantidad neta de energía utilizada para completar los trabajos a fin de llegar a un resultado creíble.
fuente
Hice algunas pruebas hoy usando esta computadora (Intel C2D T8100) y usando aplicaciones SETI @ Home optimizadas del instalador lunático 0.36. Utilicé M $ Joulmeter para calcular el consumo de energía. Medí los tiempos de consumo del árbol. Primero, dejé que BOINC tomara 100% de núcleos y 100% de tiempo de CPU y lo dejé correr por una hora. El procesador consumía 20 W y los gráficos de tiempo de CPU del administrador de tareas eran planos al 100%. El consumo de energía promedio de mi computadora fue de 45.05W y aumentó y en el momento en que detuve el consumo de energía de prueba fue de 46.18W.
En la segunda prueba, configuré BOINC para tomar el 50% de los núcleos disponibles y el 100% del tiempo de CPU y lo dejé correr durante una hora. El consumo de energía de la CPU varió entre 12W y 13W. El consumo promedio fue de 42.72 W y en aumento. En el momento en que detuve la prueba, el consumo era de 44W. Para hacer que el gráfico de tiempo de la CPU para el núcleo objetivo sea plano, configuro la afinidad del programa en un núcleo y la prioridad en alta. El gráfico para otro núcleo mostró un uso de tiempo de CPU algo mayor que el normal.
Para la tercera prueba, configuré BOINC para usar el 100% de los núcleos disponibles y el 50% del tiempo de CPU. El consumo de energía varió en grandes saltos entre 5W y 17W. El consumo de energía promedio después de una hora de prueba fue de 39.96 W y cayó. Gráficos de tiempo de CPU en bucle como
/\/\/\/\/\/\/\/\/\/\/\/\/\
. Se esperaban picos debido al tamaño de las unidades de tiempo utilizadas por BOINC.Por lo tanto, creo que es más eficiente usar dos núcleos funcionando a media carga que ejecutar un núcleo a plena carga.
Y sí, sé que para un estudio adecuado se necesitan muchas más muestras, pero en ese momento no tengo suficientes computadoras o tiempo para hacer las estadísticas adecuadas.
fuente
La respuesta a su pregunta es doble: si está ejecutando un código paralelo altamente vectorizable, equilibrar la carga en múltiples núcleos siempre es más eficiente. Los núcleos funcionarán a cargas más bajas liberando menos calor que un núcleo único que se empuja a su límite. Por otro lado, si su código no es paralelo, entonces ejecutarlo en múltiples núcleos es menos eficiente debido a la cantidad de errores de caché que ocurrirán debido a las dependencias en el código. Esto aún puede generar menos calor, pero definitivamente tomará más tiempo completar su tarea en comparación con ejecutarlo en un solo núcleo.
fuente
Su pregunta, tal como se hizo, tiene demasiadas incógnitas. ¿Estás preguntando sobre la eficiencia del tiempo o la eficiencia energética? ¿Código no paralelo o código paralelo? ¿Trabajo único o multitarea de escritorio promedio? Si tiene una factura de energía de más de $ 1000 / mes para sus computadoras, entonces podría valer la pena una o dos preocupaciones. De lo contrario, no puede ahorrar lo suficiente para que valga la pena resolver el problema. Es divertido hablar, pero si tiene un problema grave, la mejor respuesta es: pruebe algunas cosas diferentes y vea qué funciona.
fuente