Las respuestas presentadas hasta ahora son muy buenas, pero también esperaba un énfasis en una diferencia particular entre el procesamiento paralelo y distribuido: el código ejecutado. Considerando los procesos paralelos, el código ejecutado es el mismo, independientemente del nivel de paralelismo (instrucción, datos, tarea). Usted escribe un solo código , y será ejecutado por diferentes subprocesos / procesadores, por ejemplo, al calcular productos de matrices o generar permutaciones.
Por otro lado, la informática distribuida implica la ejecución de diferentes algoritmos / programas al mismo tiempo en diferentes procesadores (de una o más máquinas). Dichos cálculos se fusionan luego en resultados intermedios / finales utilizando los medios disponibles de comunicación / sincronización de datos (memoria compartida, red). Además, la informática distribuida es muy atractiva para el procesamiento de BigData, ya que permite explotar el paralelismo de disco (generalmente el cuello de botella para grandes bases de datos).
Finalmente, para el nivel de paralelismo, puede tomarse más bien como una restricción en la sincronización. Por ejemplo, en GPGPU, que es una sola instrucción de datos múltiples (SIMD), el paralelismo ocurre al tener diferentes entradas para una sola instrucción, cada par (data_i, instrucción) ejecutado por un hilo diferente. Tal es la restricción que, en el caso de ramas divergentes, es necesario descartar muchos cálculos innecesarios, hasta que los hilos vuelvan a converger. Sin embargo, para hilos de CPU, comúnmente divergen; sin embargo, uno puede usar estructuras de sincronización para garantizar la ejecución concurrente de secciones específicas del código.