Komputasi terdistribusi vs paralel

61

Saya sering mendengar orang berbicara tentang komputasi paralel dan komputasi terdistribusi , tetapi saya mendapat kesan bahwa tidak ada batasan yang jelas antara keduanya, dan orang-orang cenderung bingung dengan cukup mudah, sementara saya percaya itu sangat berbeda:

  • Komputasi paralel lebih erat digabungkan ke multi-threading, atau bagaimana memanfaatkan sepenuhnya CPU tunggal.
  • Didistribusikan komputasi mengacu pada gagasan membagi dan menaklukkan, melaksanakan sub-tugas pada mesin yang berbeda dan kemudian menggabungkan hasil.

Namun, sejak kami melangkah ke era Big Data , tampaknya perbedaannya memang mencair, dan sebagian besar sistem saat ini menggunakan kombinasi komputasi paralel dan terdistribusi.

Contoh yang saya gunakan dalam pekerjaan saya sehari-hari adalah Hadoop dengan paradigma Map / Reduce, sistem yang terdistribusi jelas dengan pekerja yang melakukan tugas pada mesin yang berbeda, tetapi juga mengambil keuntungan penuh dari setiap mesin dengan beberapa komputasi paralel.

Saya ingin mendapatkan saran untuk memahami bagaimana tepatnya membuat perbedaan di dunia saat ini, dan jika kita masih dapat berbicara tentang komputasi paralel atau tidak ada lagi perbedaan yang jelas. Bagi saya tampaknya komputasi terdistribusi telah tumbuh banyak selama beberapa tahun terakhir, sementara komputasi paralel tampaknya mandek, yang mungkin bisa menjelaskan mengapa saya mendengar lebih banyak berbicara tentang mendistribusikan komputasi daripada memparalelkan.

Charles Menguy
sumber
5
Komputasi paralel tidak selalu berarti CPU tunggal: ada sistem yang memiliki banyak CPU fisik.
svick
2
Juga, komputasi terdistribusi tidak dibatasi untuk membagi & menaklukkan per se. Saya memiliki lebih banyak masalah dengan orang-orang yang membingungkan konkurensi dan paralelisme.
Raphael
1
Jika Anda secara eksplisit menangani komputasi terdistribusi, Anda harus menangani kasus kegagalan yang lebih dalam. Banyak hal hanya didistribusikan karena alasan geografis. Beberapa sistem terdistribusi memiliki sedikit hal yang terjadi secara paralel karena simpul sentral dalam jaringan adalah hambatan.
Rob

Jawaban:

57

Ini sebagian adalah masalah terminologi, dan karena itu, hanya mengharuskan Anda dan orang yang Anda bicarakan untuk mengklarifikasi terlebih dahulu. Namun, ada beberapa topik berbeda yang lebih kuat terkait dengan paralelisme , konkurensi , atau sistem terdistribusi .

Paralelisme pada umumnya berkaitan dengan menyelesaikan perhitungan tertentu secepat mungkin, mengeksploitasi banyak prosesor. Skala prosesor dapat berkisar dari beberapa unit aritmatika di dalam prosesor tunggal, hingga beberapa prosesor yang berbagi memori, hingga mendistribusikan komputasi pada banyak komputer. Di sisi model komputasi, paralelisme umumnya tentang menggunakan beberapa utas komputasi simultan secara internal, untuk menghitung hasil akhir. Paralelisme juga kadang-kadang digunakan untuk sistem reaktif real-time , yang berisi banyak prosesor yang berbagi satu master clock; sistem seperti itu sepenuhnya deterministik .

Concurrency adalah studi tentang komputasi dengan banyak utas komputasi. Konkurensi cenderung berasal dari arsitektur perangkat lunak daripada dari arsitektur perangkat keras. Perangkat lunak dapat ditulis untuk menggunakan konkurensi untuk mengeksploitasi paralelisme perangkat keras, tetapi sering kali kebutuhan tersebut melekat dalam perilaku perangkat lunak, untuk bereaksi terhadap berbagai peristiwa tak sinkron (misalnya utas komputasi yang bekerja secara independen dari utas antarmuka pengguna, atau program yang bereaksi ke interupsi perangkat keras dengan beralih ke utas penangan interrupt).

Studi komputasi terdistribusi memisahkan prosesor yang terhubung oleh tautan komunikasi. Sedangkan model pemrosesan paralel sering (tetapi tidak selalu) mengasumsikan memori bersama, sistem terdistribusi bergantung secara mendasar pada penyampaian pesan. Sistem terdistribusi secara inheren berbarengan. Seperti konkurensi, distribusi seringkali merupakan bagian dari tujuan, bukan semata-mata bagian dari solusi: jika sumber daya berada di lokasi yang berbeda secara geografis, sistem didistribusikan secara inheren. Sistem di mana kegagalan sebagian (dari node prosesor atau tautan komunikasi) mungkin termasuk dalam domain ini.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
2
Jawaban yang bagus. Orang harus menekankan bahwa komputasi terdistribusi adalah bagian dari komputasi paralel.
Raphael
6
@ Raphael: Saya tidak berpikir bahwa itu secara akurat mewakili fokus kedua bidang. Memang, mereka sering dianggap bidang yang benar-benar terpisah, karena mereka menangani masalah yang sama sekali berbeda. Ketika memprogram komputer paralel menggunakan MPI, seseorang tidak benar-benar khawatir dengan kegagalan parsial, karena ini lebih kecil kemungkinannya terjadi pada komputer tersebut. Di sisi lain, komputasi terdistribusi lebih peduli dengan masalah distribusi, seperti kegagalan parsial, dan jauh lebih sedikit khawatir tentang memeras setiap siklus CPU keluar dari mesin yang tersedia.
Dave Clarke
4
@Raphael Sebaliknya, komputasi terdistribusi sangat independen dari komputasi paralel. Dalam studi sistem terdistribusi, komputasi paralel sering menjadi kasus yang membosankan (tidak ada sumber daya lokal yang menarik, tidak ada kegagalan).
Gilles 'SO- stop being evil'
Saya menggunakan kata-kata itu secara harfiah; Sayang sekali jika persyaratan telah disesuaikan dan dengan demikian menyimpang.
Raphael
Terima kasih atas jawaban Anda @Gilles, sepertinya saya agak bias terhadap komputasi terdistribusi, senang melihat seseorang yang merujuk ke sesuatu dengan persyaratan yang sesuai!
Charles Menguy
17

Seperti yang ditunjukkan oleh @Raphael, Distributed Computing adalah bagian dari Parallel Computing; pada gilirannya, Parallel Computing adalah bagian dari Concurrent Computing.

Concurrency mengacu pada berbagisumber daya dalam jangka waktu yang sama. Sebagai contoh, beberapa proses berbagi CPU (atau core CPU) yang sama atau berbagi memori atau perangkat I / O. Sistem operasi mengelola sumber daya bersama. Mesin multiprosesor dan sistem terdistribusi adalah arsitektur di mana kontrol konkurensi memainkan peran penting. Konkurensi terjadi pada tingkat perangkat keras dan perangkat lunak. Beberapa perangkat beroperasi pada saat yang sama, prosesor memiliki paralelisme internal dan bekerja pada beberapa instruksi secara bersamaan, sistem memiliki banyak prosesor, dan sistem berinteraksi melalui komunikasi jaringan. Konkurensi terjadi pada tingkat aplikasi dalam penanganan sinyal, dalam tumpang tindih I / O dan pemrosesan, dalam komunikasi, dan dalam pembagian sumber daya antara proses atau di antara utas dalam proses yang sama.

Dua proses (atau utas) yang dieksekusi pada sistem yang sama sehingga eksekusinya saling terkait dalam waktu bersamaan: proses (utas) berbagi sumber daya CPU. Saya suka definisi berikut: dua proses (utas) yang dieksekusi pada sistem yang sama adalah bersamaan jika dan hanya jika proses kedua (utas) memulai eksekusi ketika proses pertama (utas) belum menghentikan eksekusinya.

Concurrency menjadi paralelisme ketika proses (atau utas) dieksekusi pada CPU yang berbeda (atau inti dari CPU yang sama). Paralelisme dalam hal ini bukan "virtual" tetapi "nyata".

Ketika CPU-CPU itu milik mesin yang sama, kami menyebut komputasi sebagai "paralel"; ketika CPU berasal dari mesin yang berbeda , dapat menyebar secara geografis, kami menyebut komputasi sebagai "didistribusikan".

Oleh karena itu, Komputasi Terdistribusi adalah bagian dari Komputasi Paralel, yang merupakan bagian dari Komputasi Bersamaan.

Tentu saja, memang benar bahwa, secara umum, komputasi paralel dan terdistribusi dianggap berbeda. Komputasi paralel terkait dengan aplikasi yang digabungkan secara ketat, dan digunakan untuk mencapai salah satu tujuan berikut:

  1. Memecahkan masalah komputasi intensif lebih cepat;
  2. Memecahkan masalah yang lebih besar dalam jumlah waktu yang sama;
  3. Memecahkan masalah ukuran yang sama dengan akurasi yang lebih tinggi dalam jumlah waktu yang sama.

Di masa lalu, tujuan pertama adalah alasan utama untuk komputasi paralel: mempercepat solusi masalah. Saat ini, dan jika mungkin, para ilmuwan terutama menggunakan komputasi paralel untuk mencapai tujuan kedua (misalnya, mereka bersedia menghabiskan jumlah waktu yang sama mereka habiskan di masa lalu memecahkan secara paralel masalah ukuran untuk menyelesaikan sekarang masalah ukuran ) atau yang ketiga (yaitu, mereka bersedia untuk menghabiskan jumlah waktu yang sama mereka habiskan di pemecahan sebelumnya secara paralel masalah ukuran untuk menyelesaikan sekarang masalah ukuranx 5 x T x xTx5xTxxtetapi dengan akurasi yang lebih tinggi menggunakan model yang jauh lebih kompleks, lebih banyak persamaan, variabel dan batasan). Komputasi paralel dapat menggunakan shared-memory, message-passing atau keduanya (misal, shared-memory intra-node menggunakan OpenMP, message-passing inter-node menggunakan MPI); mungkin menggunakan akselerator GPU juga. Karena aplikasi ini berjalan pada satu superkomputer paralel, kami biasanya tidak memperhitungkan masalah akun seperti kegagalan, partisi jaringan dll, karena kemungkinan kejadian ini, untuk tujuan praktis, mendekati nol. Namun, aplikasi paralel besar seperti simulasi perubahan iklim, yang dapat berjalan selama beberapa bulan, biasanya berkaitan dengan kegagalan, dan menggunakan mekanisme checkpointing / restart untuk menghindari memulai simulasi lagi dari awal jika masalah muncul.

Komputasi terdistribusi terkait dengan aplikasi yang digabungkan secara longgar, di mana tujuannya (untuk superkomputer terdistribusi ) adalah untuk memecahkan masalah yang terlalu besar atau yang pelaksanaannya dapat dibagi pada komponen yang berbeda yang dapat mengambil manfaat dari eksekusi pada arsitektur yang berbeda. Ada beberapa model termasuk client-server, peer-to-peer dll. Masalah-masalah yang timbul dalam komputasi terdistribusi, seperti keamanan, kegagalan, partisi jaringan dll harus dipertimbangkan pada waktu desain, karena dalam konteks ini kegagalan adalah aturan dan tidak terkecuali.

Akhirnya, komputasi Grid dan Cloud keduanya merupakan himpunan bagian dari komputasi terdistribusi. Paradigma komputasi grid muncul sebagai bidang baru yang dibedakan dari komputasi terdistribusi tradisional karena fokusnya pada berbagi sumber daya skala besar dan aplikasi inovatif berkinerja tinggi. Sumber daya yang dibagikan, biasanya milik beberapa domain administratif yang berbeda (disebut Organisasi Virtual ). Grid Computing, sementara banyak digunakan oleh para ilmuwan dalam dekade terakhir, secara tradisional sulit bagi pengguna biasa. Cloud computing mencoba menjembatani kesenjangan, dengan memungkinkan pengguna biasa untuk mengeksploitasi banyak mesin dengan mudah, yang terletak di pusat data yang sama dan tidak terdistribusi secara geografis, melalui penggunaan Mesin Virtualyang dapat dirakit oleh pengguna untuk menjalankan aplikasi mereka. Karena perangkat keras, khususnya kurangnya interkoneksi jaringan berkinerja tinggi (seperti Infiniband dll), cloud tidak ditargetkan untuk menjalankan aplikasi MPI paralel. Aplikasi terdistribusi yang berjalan di cloud biasanya diterapkan untuk mengeksploitasi paradigma Peta / Kurangi. Ngomong-ngomong, banyak orang menganggap Map / mengurangi sebagai model aliran data paralel.

Massimo Cafaro
sumber
2
Saya pikir jawaban ini agak menyesatkan; ini berfokus pada komputasi kinerja tinggi terdistribusi (yang memang terkait erat dengan komputasi kinerja tinggi paralel), sementara seluruh bidang komputasi terdistribusi jauh lebih luas.
Jukka Suomela
Saya tidak setuju: jawabannya juga mencakup komputasi kinerja tinggi terdistribusi, yang, biasanya, tidak digunakan dalam komputasi terdistribusi. Memang, saya membahas model client-server dan peer-to-peer, keamanan, kegagalan dan masalah partisi jaringan yang merupakan ranah komputasi terdistribusi.
Massimo Cafaro
+1. Balasan yang bagus! Saya ingin tahu apakah komputasi terdistribusi digunakan untuk tujuan selain komputasi paralel? Dengan kata lain, apakah komputasi terdistribusi merupakan bagian dari komputasi paralel, yaitu apakah komputasi terdistribusi termasuk dalam komputasi paralel? Btw, ini pertanyaan saya cs.stackexchange.com/questions/20064
Tim
1
@Tim, komputasi terdistribusi juga digunakan per se, terlepas dari komputasi paralel. Pikirkan, misalnya, untuk algoritma terdistribusi klasik seperti pemilihan pemimpin, konsensus dll.
Massimo Cafaro
7

Saya tidak yakin saya mengerti pertanyaannya. Perbedaan antara pemrosesan paralel dan terdistribusi masih ada. Fakta bahwa Anda dapat mengambil keuntungan dari keduanya dalam perhitungan yang sama tidak mengubah arti konsep.

Dan saya tidak tahu berita apa yang Anda ikuti, tetapi saya cukup yakin pemrosesan paralelnya tidak mandek, terutama karena saya pikir itu berguna lebih sering.

Jika Anda perlu memproses terabyte data, komputasi terdistribusi (mungkin dikombinasikan dengan komputasi paralel) adalah cara yang harus dilakukan. Tetapi jika Anda perlu menghitung sesuatu pada desktop atau smartphone, komputasi paralel saja mungkin akan memberi Anda hasil terbaik, mengingat koneksi internet mungkin tidak selalu tersedia dan ketika itu, itu bisa lambat.

svick
sumber
1
-1, karena jawaban ini tidak benar-benar menjawab pertanyaan (yaitu, jelaskan persyaratannya).
Jukka Suomela
@JukkaSuomela, pertanyaannya bukan tentang menjelaskan persyaratan, tetapi perbedaan di antara mereka.
svick
6

Berikut ini makalah terbaru yang layak dibaca:

Michel Raynal: "Komputasi Paralel vs Komputasi Terdistribusi: A Great Confusion?" , Proc. Euro-Par 2015 , doi: 10.1007 / 978-3-319-27308-2_4

Abstrak:

Makalah posisi pendek ini membahas fakta bahwa, dari sudut pandang pengajaran, paralelisme dan komputasi terdistribusi sering bingung, sementara, ketika melihat sifat mendalam mereka, mereka membahas masalah mendasar yang berbeda. Oleh karena itu, kurikulum yang tepat harus dirancang secara terpisah untuk masing-masingnya. Sikap "semuanya ada dalam segala hal (dan secara timbal balik)" tampaknya tidak menjadi pendekatan yang relevan untuk mengajarkan siswa konsep-konsep penting yang menjadi ciri paralelisme di satu sisi, dan komputasi terdistribusi di sisi lain.

Jukka Suomela
sumber
4

Di bagian Pendahuluan buku [1], penulis memberikan perspektif lain (berbeda dari yang ada di jawaban lain) tentang perbandingan antara komputasi terdistribusi dan komputasi paralel.

Secara umum, tujuan pemrosesan paralel adalah menggunakan semua prosesor untuk melakukan satu tugas besar. Sebaliknya, setiap prosesor dalam sistem terdistribusi umumnya memiliki agenda semi-independen sendiri, tetapi karena berbagai alasan, termasuk berbagi sumber daya, ketersediaan, dan toleransi kesalahan, prosesor perlu mengoordinasikan tindakan mereka.

Dari perspektif ini, paradigma Map / Reduce terutama jatuh ke dalam konteks komputasi paralel. Namun, jika kita ingin node yang terlibat mencapai konsensus tentang pemimpin bersama, dengan menggunakan, misalnya, algoritma Paxos (wiki) , maka kita sedang mempertimbangkan masalah khas dalam komputasi terdistribusi.

[1] Komputasi Terdistribusi. Fundamental, Simulasi, dan Topik Tingkat Lanjut. Hagit Attiya dan Jennifer Welch. 2004

Hengxin
sumber
0

Ada jawaban yang lebih tepat di sini. Pada dasarnya parallelmengacu pada memory-shared multiprocessorsedangkan distributedmengacu pada private-memory multicomputers. Artinya, yang pertama adalah mesin multicore atau superscalar tunggal sedangkan yang lain adalah jaringan komputer yang terdistribusi secara geografis. Yang terakhir menyiratkan lebih sedikit kopling dan, dengan demikian, lebih banyak ketersediaan dan toleransi kesalahan dengan biaya lebih sedikit kinerja. Performa ini terpuruk karena Anda memerlukan data (de-) serialisasi di setiap round-trip dan pengirimannya pada jarak yang lebih jauh sedangkan Anda cukup merujuk objek di memori untuk meneruskannya ke CPU lain dalam prosesor paralel.

Alien kecil
sumber