7

Los lenguajes de programación modernos proporcionan mecanismos de paralelismo y concurrencia como ciudadanos de primera clase a sus usuarios. Entiendo cómo se programan los algoritmos paralelos y puedo imaginar cómo dos hilos en una CPU multi-core pueden ejecutarse en paralelo.¿Cómo es posible el paralelismo en un solo hilo/núcleo?

Sin embargo, la mayoría de estas plataformas también admite la ejecución de procesos paralelos en un solo hilo.

  • ¿Estos procesos realmente se ejecutan en paralelo?
  • ¿Cómo, en un nivel de conjunto, se pueden ejecutar dos rutinas diferentes simultáneamente en un único hilo?

Respuesta

6

TLTR; : no es posible el paralelismo (en el sentido de verdadero ejecución simultánea) en un único núcleo de CPU no hipertrofiado.


Hardware (< - EDIT) paralelismo se puede alcanzar a varios niveles. Ordenadas por la disminución de granularidad:

  1. multi-anfitrión
  2. multi-procesador
  3. multi-núcleo
  4. multi-hilos ("Hyper-Threading", es decir, "HT") (EDIT: I voluntariedad omitir el caso de compuations vectorizados donde varios ALU puede ser impulsado por el mismo núcleo)

Su pregunta se refiere a la ejecución de dos subprocesos de software en los casos 3. (En caso de que el TC está disponible/desactivado) o 4.

  • En ambos casos, los procesos en realidad no se ejecutan en paralelo. El usuario tiene una impresión de simultaneidad debido a los conmutadores de contexto extremadamente rápidos realizados en el nivel de la CPU, que tienden a asignar, secuencialmente, el tiempo del núcleo físico (hilo respectivamente) a una u otra subproceso de software

  • en ambos casos, esas rutinas simplemente no se ejecutan simultáneamente, sino secuencialmente

la prioridad relativa asignada a cada uno de esos 2 rutinas se pueden configurar en varios sistemas operativos por la "prioridad" que le da al proceso, que serán manejadas por el programador del sistema operativo, que a su vez asignará el tiempo de CPU.

HTH.

Para realizar pruebas para comprender mejor este tema, es posible que desee google "afinidad con la CPU". Esto le permitirá ejecutar un proceso de dos subprocesos en un solo núcleo físico de una CPU multinúcleo, y medir el tiempo de cada uno de los subprocesos, al modificar su prioridad, etc. ...

+0

(4) mezcla las dos cosas diferentes. HT es soporte de hardware para permitir el cambio rápido entre dos hilos (de modo que si un hilo está esperando datos de la memoria, el otro puede hacerse cargo). también hay (5) que es un subproceso "simple" en el nivel de software. tanto 4 como 5 no son "verdaderos" hilos donde las operaciones ocurren en paralelo pero (4) se acerca mucho más, ya que algunas operaciones (u operaciones parciales) pueden ocurrir en paralelo con el otro hiper hilo. por ejemplo, la recuperación de memoria para un hiper hilo puede estar ocurriendo mientras el otro se ejecuta. –

+0

@adrew cooke: gracias por refinar la lista. Intencionalmente no incluí (5) en la lista precisamente porque es un paralelismo de "software", por lo que tiene razón (y estoy modificando la publicación inicial): solo estaba enumerando los tipos de paralelismo de "hardware". –

+0

-1: todas las CPU modernas proporcionan paralelismo en el nivel de instrucción. Ver mi respuesta –

1

Sí, hay es paralelismo en cada hilo y lo obtiene de forma gratuita, sin importar el lenguaje de programación que use (aunque la cantidad de paralelismo puede variar).

Se llama instruction-level parallelism.Los detalles son bastante complejos y difieren entre las diferentes microarquitecturas del procesador.

Computer Architecture: A Quantitative Approach es un libro brillante que incluye un capítulo sobre el paralelismo a nivel de instrucción y los ejemplos del libro enseñan a pensar racionalmente sobre ingeniería.

Comprobar los siguientes enlaces para obtener más información:

http://en.wikipedia.org/wiki/Superscalar

http://en.wikipedia.org/wiki/Instruction_pipelining

http://en.wikipedia.org/wiki/Out-of-order_execution

Cuestiones relacionadas