Introduction to Parallel Computing
Artikel ini akan memberi Anda pengenalan dasar dan nantinya akan menjelaskan secara rinci tentang komputasi paralel. Sebelum lanjut ke topik utama mari kita pahami dulu apa itu Komputasi Paralel.
What is Parallel Computing?
Eksekusi banyak tugas atau proses secara bersamaan dengan memanfaatkan berbagai sumber daya komputasi, seperti beberapa prosesor atau node komputer, untuk menyelesaikan masalah komputasi disebut sebagai komputasi paralel. Ini adalah teknik untuk meningkatkan kinerja dan efisiensi komputasi dengan membagi operasi yang sulit menjadi sub-tugas yang lebih kecil yang dapat diselesaikan secara bersamaan.
Tugas dipecah menjadi komponen-komponen yang lebih kecil dalam komputasi paralel, dengan masing-masing komponen berjalan secara bersamaan pada sumber daya komputer yang berbeda. Sumber daya ini dapat terdiri dari inti pemrosesan terpisah dalam satu komputer, jaringan komputer, atau platform komputasi berkinerja tinggi khusus.
Various Methods to Enable Parallel Computing
Kerangka kerja dan model pemrograman yang berbeda telah dibuat untuk mendukung komputasi paralel. Desain dan implementasi algoritma paralel menjadi lebih mudah dengan abstraksi dan alat model ini. Model pemrograman yang sering digunakan antara lain:
- Message Passing Interface (MPI): Message Passing Interface (MPI) adalah pendekatan populer untuk mengembangkan sistem komputasi paralel, khususnya dalam situasi dengan memori terdistribusi. Melalui penyampaian pesan, memungkinkan komunikasi serta kolaborasi antara berbagai proses.
- CUDA: NVIDIA merancang CUDA, sebuah platform untuk komputasi paralel dan bahasa pemrograman. Ini memberi pemrogram kemampuan untuk menggunakan komputasi paralel tujuan umum secara maksimal menggunakan GPU NVIDIA.
- OpenMP: Untuk pemrograman paralel memori bersama, OpenMP adalah pendekatan yang disukai. Hal ini memungkinkan pemrogram untuk menentukan bagian paralel dalam kode mereka, yang kemudian diproses oleh beberapa thread yang berjalan pada berbagai prosesor.
Applications of Parallel Computing
1. Paralelisme tingkat bit:
Eksekusi operasi secara simultan pada beberapa bit atau digit biner dari suatu elemen data disebut sebagai paralelisme tingkat bit dalam komputasi paralel. Ini adalah jenis paralelisme yang menggunakan kemampuan pemrosesan paralel arsitektur perangkat keras untuk beroperasi pada banyak bit secara bersamaan.
Paralelisme tingkat bit sangat efektif untuk operasi pada data biner seperti penjumlahan, pengurangan, perkalian, dan operasi logika. Waktu eksekusi dapat dikurangi secara signifikan dengan mengeksekusi tindakan ini pada beberapa bit secara bersamaan, sehingga menghasilkan peningkatan kinerja.
Misalnya, pertimbangkan penambahan dua bilangan biner: 1101 dan 1010. Sebagai bagian dari pemrosesan sekuensial, penambahan akan dilakukan sedikit demi sedikit, dimulai dengan bit paling tidak signifikan (LSB) dan memindahkan bit bawaan ke bit berikutnya. Penambahan dapat dilakukan secara bersamaan untuk setiap pasangan bit terkait ketika paralelisme tingkat bit digunakan, dengan memanfaatkan kemampuan pemrosesan paralel. Hasilnya, eksekusi lebih cepat dapat dilakukan, dan kinerja ditingkatkan secara keseluruhan.
Elemen perangkat keras khusus yang dapat beroperasi pada beberapa bit sekaligus, seperti penambah paralel, pengganda, atau gerbang logika, sering kali digunakan untuk mengimplementasikan paralelisme tingkat bit. Prosesor modern mungkin juga memiliki instruksi SIMD (Instruksi Tunggal, Banyak Data) atau unit pemrosesan vektor, yang memungkinkan operasi pada beberapa komponen data, termasuk beberapa bit, dijalankan secara paralel.
2. Paralelisme tingkat instruksi:
ILP, atau paralelisme tingkat instruksi, adalah konsep komputasi paralel yang berfokus pada menjalankan beberapa instruksi secara bersamaan pada satu prosesor. Daripada mengandalkan banyak prosesor atau sumber daya komputasi, ia berupaya memanfaatkan paralelisme alami yang ada dalam program pada tingkat instruksi.
Instruksi dilakukan secara berurutan oleh prosesor tradisional, satu demi satu. Namun demikian, banyak program berisi instruksi independen yang dapat dijalankan secara bersamaan tanpa mengganggu keluaran satu sama lain. Untuk meningkatkan kinerja, paralelisme tingkat instruksi berupaya mengenali dan memanfaatkan instruksi terpisah ini.
Paralelisme tingkat instruksi dapat dicapai melalui berbagai metode:
- Pipelining: Pipelining membagi proses pelaksanaan instruksi menjadi beberapa langkah, yang masing-masing dapat menjalankan lebih dari satu perintah sekaligus. Hal ini memungkinkan eksekusi banyak instruksi untuk tumpang tindih ketika mereka berada dalam tahap eksekusi yang berbeda. Setiap langkah menjalankan tugas yang berbeda, seperti mengambil, mendekode, mengeksekusi, dan menulis kembali instruksi.
- Eksekusi Di Luar Pesanan: Berdasarkan ketersediaan data input dan sumber daya eksekusi, prosesor secara dinamis mengatur ulang instruksi selama eksekusi di luar urutan. Hal ini meningkatkan pemanfaatan unit eksekusi dan mengurangi waktu idle dengan memungkinkan instruksi independen dieksekusi di luar urutan kode aslinya.
3. Task Parallelism
Gagasan paralelisme tugas dalam komputasi paralel mengacu pada pembagian suatu program atau komputasi menjadi banyak tugas yang dapat dilakukan secara bersamaan. Setiap tugas bersifat otonom dan dapat dijalankan pada unit pemrosesan yang berbeda, seperti beberapa inti dalam CPU multiinti atau node dalam sistem komputasi terdistribusi.
Pembagian pekerjaan menjadi tugas-tugas terpisah daripada pembagian data adalah fokus utama paralelisme tugas. Ketika dilakukan secara bersamaan, pekerjaan dapat memanfaatkan kemampuan pemrosesan paralel yang tersedia dan sering kali beroperasi pada berbagai subset data masukan. Strategi ini sangat membantu ketika tugas-tugas bersifat otonom atau hanya bergantung satu sama lain.
Tujuan utama paralelisme tugas adalah untuk memaksimalkan penggunaan sumber daya komputasi yang tersedia dan meningkatkan kinerja program atau komputasi secara keseluruhan. Dibandingkan dengan eksekusi sekuensial, waktu eksekusi dapat dikurangi secara signifikan dengan menjalankan banyak proses secara bersamaan.
Paralelisme tugas dapat dilakukan dengan berbagai cara, beberapa di antaranya dijelaskan di bawah
- Paralelisme berbasis thread: Ini melibatkan pemecahan satu program menjadi beberapa thread eksekusi. Saat dijalankan secara bersamaan pada berbagai inti atau prosesor, setiap thread memiliki tugas yang berbeda. Umumnya, sistem memori bersama menggunakan paralelisme berbasis thread.
- Paralelisme berbasis tugas: Tugas didefinisikan secara eksplisit dan dijadwalkan untuk dieksekusi dalam model ini. Penjadwal tugas secara dinamis menetapkan tugas ke sumber daya pemrosesan yang tersedia, dengan mempertimbangkan ketergantungan dan keseimbangan beban. Paralelisme berbasis tugas adalah metode yang serbaguna dan efektif untuk mengekspresikan paralelisme yang dapat digunakan dengan paradigma pemrograman paralel lainnya.
- Paralelisme berbasis proses: Metode ini melibatkan pemisahan program menjadi banyak proses, yang masing-masing mewakili tugas terpisah. Dalam sistem komputasi terdistribusi, proses dapat beroperasi pada node komputasi yang berbeda secara bersamaan. Dalam sistem memori terdistribusi, paralelisme berbasis proses sering digunakan.
Advantages of Parallel Computing
- Efisiensi Biaya: Komputasi paralel dapat membantu Anda menghemat uang dengan memanfaatkan perangkat keras komoditas dengan banyak prosesor atau inti daripada perangkat keras khusus yang mahal. Hal ini membuat komputasi paralel lebih mudah diakses dan hemat biaya untuk berbagai aplikasi.
- Toleransi Kesalahan: Sistem untuk komputasi paralel sering kali dapat dibangun agar tahan terhadap kesalahan. Sistem dapat terus berfungsi dan dapat diandalkan meskipun prosesor atau inti mengalami kegagalan karena dapat terus dihitung pada prosesor lainnya.
- Efisiensi Sumber Daya: Komputasi paralel memanfaatkan sumber daya secara lebih efektif dengan membagi beban kerja di antara beberapa prosesor atau inti. Komputasi paralel dapat memaksimalkan pemanfaatan sumber daya dan meminimalkan waktu menganggur daripada hanya mengandalkan satu prosesor, yang mungkin kurang dimanfaatkan untuk beberapa tugas.
- Memecahkan Masalah Skala Besar: Masalah berskala besar yang tidak dapat ditangani secara efektif pada satu mesin paling baik diselesaikan dengan menggunakan komputasi paralel. Hal ini memungkinkan untuk membagi masalah menjadi bagian-bagian yang lebih kecil, mendistribusikan potongan-potongan tersebut ke beberapa prosesor, dan kemudian menggabungkan hasilnya untuk menemukan solusi.
- Skalabilitas: Dengan menambahkan lebih banyak prosesor atau inti, sistem komputasi paralel dapat meningkatkan daya komputasinya. Skalabilitas ini memungkinkan penanganan masalah yang lebih besar dan kompleks dengan sukses. Komputasi paralel dapat menawarkan sumber daya yang dibutuhkan untuk mengatasi masalah secara efektif seiring dengan bertambahnya ukuran masalah.
Disadvantages of Parallel Computing
- Peningkatan Persyaratan Memori: Replikasi data di beberapa prosesor, yang sering terjadi dalam komputasi paralel, dapat menyebabkan kebutuhan memori yang lebih tinggi. Jumlah memori yang diperlukan oleh sistem paralel berskala besar untuk menyimpan dan mengelola data yang direplikasi mungkin berdampak pada biaya dan penggunaan sumber daya.
- Debugging dan Pengujian: Men-debug program paralel bisa lebih sulit daripada men-debug program berurutan. Kondisi balapan, kebuntuan, dan masalah sinkronisasi yang tidak tepat bisa jadi sulit dan memakan waktu lama untuk diidentifikasi dan diperbaiki. Juga lebih sulit untuk menguji program paralel secara menyeluruh untuk memastikan keandalan dan akurasi.
- Kompleksitas: Memprogram sistem paralel serta mengembangkan algoritma paralel bisa jadi jauh lebih sulit daripada pemrograman sekuensial. Ketergantungan data, penyeimbangan beban, sinkronisasi, dan komunikasi antar prosesor harus diperhitungkan dengan cermat saat menggunakan algoritma paralel.
//AZS