Back to IF3130 Sistem Paralel dan Terdistribusi

Topic

Questions/Cues

  • Apa beda Concurrent, Parallel, dan Distributed?

  • Apa itu sistem Shared-Memory?

  • Apa itu sistem Distributed-Memory?

  • Bagaimana cara core berkomunikasi?

  • Apa saja contoh model pemrograman paralel?

  • Apa itu MPI?

  • Apa itu Pthreads?

  • Apa saja aspek koordinasi dalam program paralel?

Reference Points

  • Slides IF3230-01-Dasar-2024.pdf

Terminologi Kunci

Meskipun sering digunakan bergantian, ada perbedaan mendasar antara istilah-istilah berikut:

  • Concurrent Computing (Komputasi Konkuren): Sebuah program di mana beberapa tugas dapat sedang dalam proses (in progress) pada satu waktu. Ini tidak berarti mereka berjalan bersamaan. Contohnya adalah sistem operasi yang menjalankan banyak aplikasi dengan beralih-alih antar tugas dengan sangat cepat.

  • Parallel Computing (Komputasi Paralel): Sebuah program di mana beberapa tugas bekerja sama secara erat dan berjalan secara bersamaan untuk menyelesaikan satu masalah besar.

  • Distributed Computing (Komputasi Terdistribusi): Sebuah program yang komponennya berada di mesin-mesin berbeda dan mungkin perlu bekerja sama dengan program lain untuk menyelesaikan masalah.

Arsitektur Sistem Paralel

Secara fundamental, sistem paralel dapat dibagi menjadi dua jenis arsitektur berdasarkan cara core mengakses memori:

  1. Shared-Memory System:
    • Konsep: Semua core terhubung ke satu ruang memori utama (RAM) yang sama. Setiap core dapat membaca dan menulis ke lokasi memori yang sama.
    • Komunikasi: Koordinasi antar core dilakukan secara implisit dengan cara membaca dan memodifikasi data di lokasi memori yang mereka bagikan.
    • Analogi: Sebuah tim yang bekerja di satu papan tulis yang sama. Semua anggota bisa melihat dan menulis di papan tulis tersebut.
    • Contoh Teknologi: Pthreads, OpenMP.
  2. Distributed-Memory System:
    • Konsep: Setiap core memiliki akses eksklusif ke memorinya sendiri yang bersifat privat. Tidak ada core yang bisa mengakses memori milik core lain secara langsung.
    • Komunikasi: Koordinasi antar core harus dilakukan secara eksplisit dengan saling mengirimkan pesan (messages) melalui sebuah jaringan interkoneksi.
    • Analogi: Sebuah tim yang setiap anggotanya bekerja di kantor terpisah. Untuk bertukar informasi, mereka harus menelepon atau mengirim email satu sama lain.
    • Contoh Teknologi: MPI (Message-Passing Interface).

Model Pemrograman Paralel

Untuk menulis program paralel, developer menggunakan framework atau API (Application Programming Interface) yang dirancang untuk arsitektur tertentu:

  • MPI (Message-Passing Interface): Standar de facto untuk pemrograman pada sistem distributed-memory. MPI menyediakan fungsi-fungsi untuk mengirim dan menerima data antar proses yang berjalan di core atau mesin yang berbeda.

  • Pthreads (POSIX Threads): Sebuah standar eksekusi untuk membuat dan mengelola threads pada sistem shared-memory. Pthreads memungkinkan sebuah program untuk memiliki beberapa alur eksekusi yang berjalan secara bersamaan dalam satu ruang memori.

  • OpenMP: Model pemrograman yang lebih tinggi levelnya dibandingkan Pthreads untuk sistem shared-memory. Developer cukup menambahkan direktif khusus (disebut #pragma) pada kode C/C++/Fortran untuk memberitahu kompiler bagian mana dari kode yang harus dijalankan secara paralel.

  • CUDA: Arsitektur komputasi paralel dan model pemrograman yang dibuat oleh NVIDIA khusus untuk GPU (Graphics Processing Unit). Ini memungkinkan penggunaan ribuan core GPU untuk komputasi umum (general-purpose computing).

Aspek Penting dalam Koordinasi

Menulis program paralel bukan hanya tentang membagi pekerjaan, tetapi juga tentang mengelola bagaimana para “pekerja” (cores) berkoordinasi. Tiga aspek utama koordinasi adalah:

  1. Communication (Komunikasi): Proses pengiriman data dari satu core ke core lainnya. Ini bisa berupa pengiriman hasil parsial, seperti pada contoh penjumlahan di catatan sebelumnya.

  2. Load Balancing (Penyeimbangan Beban): Memastikan setiap core mendapatkan porsi pekerjaan yang seimbang. Jika satu core bekerja terlalu berat sementara yang lain sudah selesai, maka efisiensi program akan menurun.

  3. Synchronization (Sinkronisasi): Memastikan core-core berjalan dalam urutan yang benar. Terkadang, sebuah core harus menunggu core lain menyelesaikan tugasnya sebelum ia bisa melanjutkan.

Summary

Pemrograman paralel memerlukan pemahaman tentang arsitektur hardware yang mendasarinya, yang secara umum terbagi menjadi sistem Shared-Memory (di mana core berbagi memori dan berkomunikasi secara implisit) dan Distributed-Memory (di mana core memiliki memori privat dan berkomunikasi secara eksplisit melalui pesan). Pilihan model pemrograman seperti Pthreads dan OpenMP untuk shared-memory, atau MPI untuk distributed-memory, bergantung pada arsitektur ini. Keberhasilan program paralel tidak hanya ditentukan oleh pembagian kerja, tetapi juga oleh manajemen koordinasi yang efektif antar core melalui komunikasi, penyeimbangan beban, dan sinkronisasi.**