¿Cómo utiliza Debian muchos núcleos de CPU?

¿Cómo utiliza Debian muchos núcleos de CPU?

Acabo de obtener una cuenta en un VPS de 24 núcleos (según UnixBench hay 24 CPU).

  1. En términos generales, ¿cómo puedo hacer un buen uso de todos estos núcleos para la computación shell de propósito general en Debian?
  2. ¿Debo escribir algo especial cuando publico aplicaciones de larga duración desde el shell para que cada proceso se ejecute en un núcleo separado, si hay alguno disponible? ¿O Debian simplemente se encarga de todo eso, de forma invisible para mí?

Respuesta1

No necesitas hacer nada especial: es trabajo del kernel decidir qué hilo va en cada CPU, y hace un trabajo mucho mejor que el que podría hacer un humano.

Sin embargo, no tiene sentido tener 24 CPU si no tienes al menos 24 subprocesos simultáneos para ejecutar. Los programas no irán mágicamente más rápido si hay más CPU disponibles: sólo se beneficiarán los programas que estén codificados para tener múltiples subprocesos paralelos, y muchos programas no se beneficiarán, no porque estén escritos de manera inferior, sino porque lo que hacen es inherentemente no paralelizable.

Un programa con N subprocesos de cálculo simultáneos se beneficiará de hasta N CPU (aunque es posible que no vaya N veces más rápido, porque la sincronización entre los subprocesos lleva tiempo). La ejecución de M programas diferentes que no interactúan mucho, si es que lo hacen, aprovecha de manera similar las M CPU (o más que eso si los programas son multiproceso).

Hay algunos casos en los que es necesaria la intervención manual para aprovechar el paralelismo. Si está iniciando varias tareas de procesamiento de datos, tenga cuidado de que se generen en paralelo (con un poco más de una tarea por CPU) en lugar de una tras otra. Por ejemplo, al crear software, pase la -jopción a make. Vea algunos otros ejemplos y explicaciones:

Si está ejecutando un servidor web, todos los servidores web diseñados para cargas pesadas son buenos para explotar el paralelismo. Apache se utiliza como caso de prueba al evaluar el rendimiento de las optimizaciones en el kernel de Linux. Sin embargo, tenga en cuenta que el paralelismo en la CPU sólo ayuda si no hay ningún otro cuello de botella, como una contención debido al acceso a la base de datos o al ancho de banda de entrada-salida.

Respuesta2

El uso de muchos núcleos para acelerar el rendimiento depende en gran medida de su aplicación. Algunas aplicaciones deben ejecutarse paso a paso: simplemente no hay manera de dividir el cálculo en paralelo entre muchos núcleos porque para calcular un determinado paso, es necesario conocer los resultados de los pasos anteriores. Si ese es el caso, entonces usar 24 núcleos es tan bueno como usar solo uno.

En otros casos, donde la aplicación necesita hacer muchas cosas que no dependen unas de otras, tener muchos núcleos puede acelerar las cosas considerablemente. Como ejemplo pertinente, si está compilando un proyecto con muchos archivos fuente, puede compilar cada archivo fuente de forma independiente antes de vincular los diferentes archivos. En tal caso, puede hacer que el compilador compile cada archivo en un núcleo separado. Las aplicaciones que pueden utilizar varios núcleos de CPU suelen tener un interruptor para que usted lo solicite. Por ejemplo, al compilar un proyecto usando GNU make, puedes pasarle el -jinterruptor seguido de un número. Este número especifica la cantidad de trabajos makeque deben iniciarse simultáneamente (léase: en diferentes núcleos).

información relacionada