Tengo un gran cálculo que hacer. Si bien puedo utilizar todos los núcleos, pensé que ¿hay alguna razón para dejar 1 núcleo y no utilizarlo? (CPU de cálculo solo sin IO). ¿O estoy subestimando el sistema operativo que no sabría manejar y hacer un cambio de contexto adecuado incluso si utilizo todos los núcleos?
12
Respuestas:
Los principales sistemas operativos son lo suficientemente maduros para saber cómo manejar los procesos que utilizan todos los núcleos disponibles. Otros procesos pueden (y con frecuencia se verán afectados), pero el cálculo no será más lento porque usó todos los núcleos disponibles.
La elección del número de núcleos depende más de su intención de hacer otra cosa mientras se realiza el cálculo.
Si, en una máquina de escritorio, desea poder usar su navegador web o mirar un video mientras se realiza el cálculo, será mejor que tenga un núcleo libre para ello. Del mismo modo, si el servidor está haciendo dos cosas (como hacer cálculos y, al mismo tiempo, procesar e informar sus métricas), podría ser una buena idea mantener un núcleo libre para la tarea paralela.
Por otro lado, si su prioridad es hacer el cálculo lo más rápido posible, debe usar todos los núcleos.
fuente
Depende.
Si la máquina está dedicada a este cálculo, debe usar todos los núcleos; los recursos informáticos no utilizados no aceleran las cosas .
Si está utilizando un programador en tiempo real, un programador no preventivo o una afinidad de procesador, entonces debe ser un poco más cuidadoso porque es fácil privar accidentalmente a otros procesos de todos los recursos informáticos. Sin embargo, tendría que cambiar manualmente esta configuración para que algo salga mal, por lo que, por defecto, no hay ningún problema aquí en la mayoría de los sistemas operativos.
Si la máquina no está dedicada al cálculo, dar el 100% al cálculo puede no ser lo ideal. Por ejemplo, si está utilizando un navegador web mientras se ejecuta el cálculo. Debido a que la carga de su máquina ocasionalmente alcanzará un pico superior al 100%, se sentirá lenta. Las tareas orientadas al rendimiento como el cálculo no se ralentizarán realmente, pero las tareas sensibles a la latencia como las GUI no reaccionarán tan rápido. Entonces es sensato iniciar solo hilos / procesos NPROC-1 para el cálculo. Alternativamente, el uso explícito de una prioridad más baja para el cálculo que para las tareas normales podría resolver este problema, en cuyo caso el cálculo debería usar procesos NPROC para no desperdiciar ningún recurso.
fuente
nice
.Soy un poco circunspecto acerca de estar de acuerdo con @motoDrizzt, a continuación, debido a sus votos negativos :), pero esa ha sido mi experiencia real: más es mejor, incluso más allá del número real de núcleos (pero no miles). Por ejemplo, eche un vistazo a http://www.forkosh.com/images/avoronoi.gif donde cada plano 2D de ese voronoi_diagrama 3D se puede generar de forma independiente. Y el programa toma un atributo nfork = n query_string para bifurcar los cálculos para n planos "simultáneamente".
Con un procesador de cuatro núcleos, el tiempo (del usuario) para completar el diagrama disminuye de forma bastante lineal con nfork, hasta aproximadamente nfork = 8 (cuatro núcleos hiperthreaded). Pero más allá de 8, el tiempo aún disminuye, aunque más lentamente. Y más allá de aproximadamente 16, más o menos, no hay ninguna mejora notable. No he analizado este comportamiento en absoluto, pero ingenuamente lo atribuyo a los procesos de malabarismo del sistema operativo (linux slackware 14.2x64 en este caso) para reducir aún más el tiempo de inactividad general.
fuente
La mejor opción depende del sistema. Entonces, lo que desea hacer es ejecutar ambas versiones en un sistema real y luego verificar cómo responde el sistema. ¿Todavía puede usar el navegador, el editor de texto, otras cosas en su sistema? ¿Y el rendimiento es mejor cuando se usan n hilos y no n-1? ¿Qué sucede si ejecuta la aplicación junto con otra aplicación que intenta usar todas las CPU?
Y luego debes considerar hyperthreading. Con cuatro núcleos más hyperthreading, puede usar 8 núcleos o 7 núcleos. Nuevamente, pruebe la capacidad de respuesta del sistema y el tiempo para terminar.
Y finalmente, considere dividir su trabajo en más bloques que hilos. La razón es que diferentes subprocesos terminarán el trabajo en diferentes momentos, y luego querrá que quede algo de trabajo para los subprocesos más rápidos. De lo contrario, tendrá que esperar hasta que finalice el último hilo.
PD. "Hyperthreading no puede ayudar con el código intensivo de FPU porque solo hay una FPU". Absolutamente equivocado Es increíblemente difícil, incluso con código intensivo de FPU, hacer un uso completo de la FPU debido a las latencias. Hyperthreading ayuda porque hay dos veces más operaciones independientes disponibles para la programación.
fuente
No sé cómo escribir esto de una manera que no suene "mal", así que tómalo como un comentario amistoso, ¿de acuerdo?
Dado que una PC promedio ya tiene usualmente miles o más hilos, ¿qué te hace pensar que usar 8 vs 7 hará alguna diferencia? :-)
Use tantos hilos como sea posible. Y si no tiene que preocuparse por la respuesta del sistema operativo, y sus hilos se ejecutan durante bastante tiempo (más de un segundo), incluso puede experimentar usando el doble de núcleos.
fuente