¿cuántos núcleos debo utilizar para los cálculos? #cores o #cores -1?

12

Tengo un gran cálculo que hacer. Si bien puedo utilizar todos los núcleos, pensé ¿hay alguna razón para dejar de lado 1 núcleo y no utilizarlo? (cálculo cpu solo no IO). ¿O estoy subestimando el sistema operativo que no sabría manejar y hacer el cambio de contexto adecuado incluso si utilizo todos los núcleos?

    
pregunta Jas 13.08.2017 - 10:27

5 respuestas

28

Los principales sistemas operativos son lo suficientemente maduros como para saber cómo manejar los procesos que usan cada núcleo disponible. Otros procesos pueden (y con frecuencia se verán afectados), pero el cálculo no será más lento porque utilizó 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 utilizar su navegador web o ver un video mientras se realiza el cálculo, es mejor que mantenga un núcleo libre para ello. De la misma manera, si el servidor está haciendo dos cosas (como hacer cálculos y, al mismo tiempo, procesar e informar sus métricas), mantener un núcleo libre para la tarea complementaria podría ser una buena idea.

Por otra parte, si su prioridad es hacer el cálculo lo más rápido posible, debe usar todos los núcleos.

    
respondido por el Arseni Mourzenko 13.08.2017 - 10:41
11

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á usando un programador en tiempo real, un programador no preferente o una afinidad de procesador, entonces debería tener un poco más de cuidado 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 de forma predeterminada no hay problema aquí en la mayoría de los sistemas operativos.

Si la máquina no está dedicada al cálculo, puede que no sea ideal dar el 100% al cálculo. Por ejemplo, si está utilizando un navegador web mientras el cálculo se está ejecutando. Debido a que la carga de su máquina ocasionalmente alcanzará un máximo del 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ápidamente. Entonces es sensato iniciar solo los procesos / subprocesos NPROC-1 para el cálculo. Alternativamente, el uso 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 utilizar procesos NPROC para no desperdiciar ningún recurso.

    
respondido por el amon 13.08.2017 - 10:46
1

Estoy algo circunspecto sobre 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 enlace donde cada plano 2D de ese 3D-voronoi_diagram se puede generar de forma independiente. Y el programa toma un atributo nfork = n query_string para descifrar los cálculos de los planos de n "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 con hipervínculos). Pero más allá de 8, el tiempo sigue disminuyendo, aunque más lentamente. Y más allá de los 16, o así, no hay ninguna mejora notable. No he analizado este comportamiento en absoluto, pero lo atribuyo ingenuamente al sistema operativo (linux slackware 14.2x64 en este caso) haciendo malabares con los procesos para reducir aún más el tiempo total de inactividad.

    
respondido por el John Forkosh 14.08.2017 - 02:27
0

La mejor opción depende del sistema. Entonces, lo que quiere hacer es ejecutar ambas versiones en un sistema real, y luego verificar cómo responde el sistema. ¿Todavía puede utilizar el navegador, editor de texto, otras cosas en su sistema? ¿Y es mejor el rendimiento cuando se utilizan n subprocesos y no n-1? ¿Qué sucede si ejecuta la aplicación junto con otra aplicación que intenta utilizar todas las CPU?

Y luego necesitas considerar el subproceso. Con cuatro núcleos más hyperthreading, podría usar 8 núcleos, o 7 núcleos. Nuevamente, pruebe la capacidad de respuesta del sistema y el tiempo para terminar.

Y, finalmente, considera dividir tu trabajo en más bloques que hilos. El motivo es que los distintos subprocesos finalizarán el trabajo en distintos momentos y, por lo tanto, querrá un poco de trabajo para los subprocesos más rápidos. De lo contrario, tendrás que esperar hasta que finalice el último hilo.

PS. "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 el código intensivo de FPU, hacer un uso completo de la FPU debido a las latencias. Hyperthreading ayuda porque hay el doble de operaciones independientes disponibles para la programación.

    
respondido por el gnasher729 13.08.2017 - 19:47
-5

No sé cómo escribir esto de una manera que no suene "mal", así que tómalo como un comentario amistoso, ¿vale?

Dado que una PC promedio ya tiene usualmente miles o más subprocesos, ¿qué te hace pensar que usar 8 vs 7 hará alguna diferencia? :-)

Usa tantos hilos como sea posible. Y si no tiene que preocuparse por la respuesta del sistema operativo, y sus subprocesos se ejecutan durante bastante tiempo (más de un segundo), incluso puede experimentar utilizando el doble de núcleos.

    
respondido por el motoDrizzt 13.08.2017 - 12:30

Lea otras preguntas en las etiquetas