Jawaban yang disajikan sejauh ini sangat bagus, tetapi saya juga mengharapkan penekanan pada perbedaan tertentu antara pemrosesan paralel dan terdistribusi: kode dieksekusi. Mempertimbangkan proses paralel, kode yang dieksekusi adalah sama, terlepas dari tingkat paralelisme (instruksi, data, tugas). Anda menulis kode tunggal , dan itu akan dieksekusi oleh utas / prosesor yang berbeda, misalnya, saat menghitung produk matriks, atau menghasilkan permutasi.
Di sisi lain, komputasi terdistribusi melibatkan eksekusi berbagai algoritma / program pada saat yang sama di prosesor yang berbeda (dari satu atau lebih mesin). Komputasi semacam itu kemudian digabungkan menjadi hasil antara / akhir dengan menggunakan sarana komunikasi / sinkronisasi data yang tersedia (memori bersama, jaringan). Selanjutnya, komputasi terdistribusi sangat menarik untuk pemrosesan BigData, karena memungkinkan untuk mengeksploitasi paralelisme disk (biasanya hambatan untuk database besar).
Akhirnya, untuk tingkat paralelisme, ini dapat dianggap sebagai kendala pada sinkronisasi. Sebagai contoh, dalam GPGPU, yang merupakan data tunggal-instruksi tunggal (SIMD), paralelisme terjadi dengan memiliki input yang berbeda untuk satu instruksi, setiap pasangan (data_i, instruksi) dieksekusi oleh utas yang berbeda. Tersebut adalah pengekangan bahwa, dalam kasus cabang yang berbeda, perlu untuk membuang banyak perhitungan yang tidak perlu, sampai thread kembali. Untuk utas CPU, biasanya mereka berbeda; namun, seseorang dapat menggunakan struktur sinkronisasi untuk memberikan eksekusi bersamaan dari bagian spesifik dari kode.