tipos tiene tener son sirven saber qué que puede procesadores procesador para núcleos nucleos nucleo multihilos los hilos entre diferencia cuantos como multithreading operating-system multiprocessing multicore cpu-architecture

multithreading - tiene - ¿Cómo funcionan SMP núcleos, procesos e hilos de trabajo juntos exactamente?



qué son procesadores multihilos (5)

@BjoernD, mencionaste eso ...

.. Si su aplicación consiste solamente en un solo hilo, entonces su sistema multi-CPU entero no lo ayudará mucho ya que solo usará una CPU para su aplicación ...

Creo que incluso si se trata de una aplicación de un solo subproceso, ese subproceso de aplicación se puede ejecutar en diferentes núcleos durante su vida útil. En cada apropiación y posterior asignación a una CPU, se puede asignar un núcleo diferente a esa cadena.

En una CPU de un solo núcleo, cada proceso se ejecuta en el sistema operativo y la CPU salta de un proceso a otro para utilizarlo mejor. Un proceso puede tener muchos subprocesos, en cuyo caso la CPU se ejecuta a través de estos subprocesos cuando se ejecuta en el proceso respectivo.

Ahora, en una CPU de núcleo múltiple:

  • ¿Los núcleos se ejecutan en todos los procesos juntos, o los núcleos se ejecutan por separado en diferentes procesos en un momento particular? Por ejemplo, tiene el programa A ejecutando dos hilos. ¿Puede una CPU de doble núcleo ejecutar ambos hilos de este programa? Creo que la respuesta debería ser sí, si estamos usando algo como OpenMP . Pero mientras los núcleos se ejecutan en este proceso OpenMP-embedded, ¿puede uno de los núcleos simplemente cambiar a otro proceso?

  • Para los programas que se crean para un solo núcleo, cuando se ejecuta al 100%, ¿por qué se distribuye la utilización de la CPU de cada núcleo? (Por ejemplo, una CPU de doble núcleo de 80% y 20%. El porcentaje de utilización de todos los núcleos siempre suma hasta 100% para este caso.) ¿Los núcleos intentan ayudarse mutuamente ejecutando cada subproceso, de cada proceso, de alguna manera? ?


Sí, los subprocesos y los procesos se pueden ejecutar simultáneamente en CPU multinúcleo, por lo que esto funciona según lo que describes (independientemente de cómo crees esos subprocesos y procesos, OpenMP u otros). Un solo proceso o subproceso solo se ejecuta en un solo núcleo a la vez. Si hay más subprocesos que solicitan tiempo de CPU que los núcleos disponibles (generalmente el caso), el planificador del sistema operativo moverá y desenrollará los subprocesos según sea necesario.

El motivo por el cual los procesos de un solo subproceso se ejecutan en más de una CPU o núcleo está relacionado con su sistema operativo y no específicamente con ninguna función del hardware. Algunos sistemas operativos no tienen sentido de "afinidad de subprocesos", no les importa en qué procesador se está ejecutando un subproceso, de modo que cuando llega el momento de reevaluar qué recursos se están utilizando (varias veces por segundo, al menos), '' ll mover un hilo / proceso de un núcleo / CPU a otro. Además de causar errores de caché, esto generalmente no afecta el rendimiento de su proceso.


Si hay una aplicación de subproceso que tiene, por ejemplo, 10 subprocesos, inicialmente se iniciará en la misma CPU / núcleo. Durante un período de tiempo, los subprocesos múltiples se distribuirán a otros cores / CPU debido al equilibrador de carga en Linux. Si hay varias aplicaciones de subprocesos de ese tipo, creo que todos los subprocesos de la aplicación se ejecutan principalmente en el mismo núcleo / CPU ya que los locales / globales de los subprocesos están disponibles en caché l1 / l2 del núcleo en el que se ejecutan. sacarlos del núcleo lleva mucho tiempo que su tiempo de ejecución. Si los hilos deben ejecutarse en un núcleo diferente, creo que uno debe proporcionar la información de afinidad al hilo.


Tenga en cuenta también que al sistema operativo no le importa mucho el proceso del que provienen los hilos. Por lo general, programará los hilos en procesadores / núcleos, independientemente del proceso del hilo. Esto podría llevar a cuatro subprocesos de un proceso ejecutándose al mismo tiempo, tan fácilmente como un subproceso de cuatro procesos ejecutándose al mismo tiempo.


Los núcleos (o CPU) son los elementos físicos de su computadora que ejecutan código. Por lo general, cada núcleo tiene todos los elementos necesarios para realizar cálculos, registrar archivos, interrumpir líneas, etc.

La mayoría de los sistemas operativos representan las aplicaciones como procesos . Esto significa que la aplicación tiene su propio espacio de direcciones (== vista de la memoria), donde el sistema operativo se asegura de que esta vista y su contenido estén aislados de otras aplicaciones.

Un proceso consiste en uno o más subprocesos , que llevan a cabo el trabajo real de una aplicación ejecutando código de máquina en una CPU. El sistema operativo determina qué hilo se ejecuta en qué CPU (utilizando heurísticas inteligentes para mejorar el equilibrio de carga, el consumo de energía, etc.). Si su aplicación consiste solamente de un solo hilo, entonces su sistema multi-CPU entero no lo ayudará mucho ya que solo usará una CPU para su aplicación. (Sin embargo, el rendimiento general aún puede mejorar ya que el sistema operativo ejecutará otras aplicaciones en las otras CPU para que no se mezclen con la primera).

Ahora a sus preguntas específicas:

1) El sistema operativo generalmente le permite al menos dar pistas sobre qué núcleo desea ejecutar ciertos hilos. Lo que OpenMP hace es generar código que genere una cierta cantidad de subprocesos para distribuir trabajo computacional compartido desde los bucles de su programa en múltiples subprocesos. Puede usar el mecanismo de sugerencia del SO (consulte: afinidad de subprocesos) para hacerlo. Sin embargo, las aplicaciones OpenMP aún se ejecutarán simultáneamente con otras y, por lo tanto, el sistema operativo puede interrumpir uno de los hilos y programar otros trabajos (potencialmente no relacionados) en una CPU. En realidad, hay muchos esquemas de programación diferentes que puede aplicar dependiendo de su situación, pero esto es muy específico y la mayoría de las veces usted debería poder confiar en que su sistema operativo hará lo correcto para usted.

2) Incluso si ejecuta una aplicación de subproceso único en una CPU multinúcleo, observará que otras CPU también funcionan. Esto viene a) del sistema operativo que hace su trabajo mientras tanto yb) del hecho de que su aplicación nunca se ejecuta sola: cada sistema en ejecución consiste en un montón de tareas de ejecución simultáneas. Verifique el administrador de tareas de Windows (o ps / top en Linux) para verificar qué se está ejecutando.