Respuesta

32

La programación multiproceso es paralela, pero la programación paralela no es necesariamente multiproceso.

A menos que el multihilo se produzca en un solo núcleo, en cuyo caso solo es concurrente.

+2

AFAIK, en un procesador de núcleo único, el enhebrado no es paralelo. Es concurrente, pero no paralelo. –

+0

@Ionut: http: //thesaurus.reference.com/browse/concurrent <- Si mira bajo el encabezado 'Sinónimos' del primer resultado. –

+5

la diferencia que hago entre concurrente y paralelo es que el paralelo es verdaderamente simultáneo, mientras que el concurrente simplemente parece como si fuera simultáneo. El cambio entre hilos es tan rápido que parece como si fuera paralelo, pero no lo es. Tal vez hay otros términos que designan esto, pero eso es lo que entiendo. –

28

No necesariamente. Puede distribuir trabajos entre múltiples procesos e incluso múltiples máquinas; no clasificaría eso como programación de "múltiples hilos", ya que cada proceso puede usar solo un hilo, pero ciertamente es una programación paralela. Es cierto que podría argumentar que con múltiples procesos hay múltiples hilos dentro del sistema como un todo ...

En última instancia, definiciones como esta solo son útiles dentro de un contexto. En su caso particular, ¿qué diferencia va a hacer? ¿O esto solo está fuera de interés?

+1

¿Deberíamos considerar SIMD como programación paralela? Estamos realizando las mismas operaciones en múltiples datos en paralelo, pero no sé si esto se considera una micro-paralelización para ser incluida en una definición de programación paralela. –

+0

Diría que SIMD es un diseño de hardware más paralelo, pero supongo que en algún nivel debe considerar el lado de la programación de tener hardware paralelo dedicado, p. ¿Qué hay de la programación de una GPU? –

26

No. La programación multiproceso significa que tiene un único proceso, y este proceso genera un montón de hilos. Todos los subprocesos se ejecutan al mismo tiempo, pero están todos en el mismo espacio de proceso: pueden acceder a la misma memoria, tener los mismos descriptores de archivo abierto, y así sucesivamente.

La programación en paralelo es un poco más "general" como definición. en MPI, realiza la programación paralela ejecutando el mismo proceso varias veces, con la diferencia de que cada proceso obtiene un "identificador" diferente, por lo que si lo desea, puede diferenciar cada proceso, pero no es necesario. Además, estos procesos son independientes entre sí y tienen que comunicarse a través de conductos o tomas de red/unix. Las bibliotecas de MPI proporcionan funciones específicas para mover datos de un lado a otro de los nodos, en estilo síncrono o asincrónico.

Por el contrario, OpenMP logra la paralelización a través de multiprocesamiento y memoria compartida. Especificas directivas especiales para el compilador y automáticamente realiza la ejecución en paralelo para ti.

La ventaja de OpenMP es que es muy transparente. ¿Tiene un bucle para paralelizar? solo agregue un par de directivas y el compilador lo fragmenta y asigne cada parte del ciclo a un procesador diferente. Desafortunadamente, necesita una arquitectura de memoria compartida para esto. Los clústeres que tienen una arquitectura basada en nodos no pueden usar OpenMP en el nivel de clúster. MPI le permite trabajar en una arquitectura basada en nodos, pero debe pagar el precio de un uso más complejo y no transparente.

+0

ow, entonces es malo 1 trabajo es procesado por n proceso no 1 trabajo es procesado por n thread –

+0

Me parece recordar que el trabajo _se_ está haciendo en la paralelización de estilo OpenMP para arquitecturas multiproceso ... No puedo recordar si es parte de OpenMP en sí, o algo más? –

+1

@Eko: no exactamente. MPI inicia n instancias del mismo programa, cada una con un número de identificación diferente en una variable especial (busque MPI_Comm_Rank). Qué hacer con esas n instancias depende de usted. –

Cuestiones relacionadas