back to IF3130 Sistem Paralel dan Terdistribusi

Tabel Konsep dan Fungsi Penting CUDA

Berikut adalah rangkuman konsep, fungsi, dan teknik fundamental dalam pemrograman CUDA yang perlu dikuasai.

Konsep / FungsiKeteranganPoin Kunci & Kapan Digunakan
Konsep Fundamental
Filosofi Desain CPU vs. GPUCPU dioptimalkan untuk Latency (mengerjakan 1 tugas secepat mungkin). GPU dioptimalkan untuk Throughput (mengerjakan banyak tugas bersamaan).Gunakan CPU untuk bagian sekuensial dan kontrol. Gunakan GPU untuk bagian yang dapat diparalelkan secara masif (komputasi data besar).
Model Host + DeviceProgram terdiri dari Host (CPU) yang menjadi manajer dan Device (GPU) yang menjadi pekerja paralel. Keduanya punya memori terpisah.Ini adalah model dasar. Semua alur kerja CUDA melibatkan transfer data antara Host dan Device.
Model Pemrograman
__global__ void namaKernel(...)Keyword untuk mendefinisikan sebuah Kernel, yaitu fungsi yang akan dieksekusi di Device (GPU) oleh banyak thread.Ini adalah inti dari kode paralel Anda. Dideklarasikan di kode global, dipanggil dari Host.
namaKernel<<<...>>>()Sintaks peluncuran kernel dari Host ke Device.Digunakan di main() atau fungsi Host lainnya untuk memulai eksekusi paralel di GPU.
cudaMalloc, cudaMemcpy, cudaFreeFungsi-fungsi untuk manajemen memori Device: alokasi, penyalinan data, dan membebaskan memori.Wajib digunakan untuk mentransfer data input dari Host ke Device sebelum kernel diluncurkan, dan mengambil hasilnya kembali setelah selesai.
Hierarki & Eksekusi
Hierarki Grid > Block > ThreadStruktur 3 tingkat untuk mengorganisir thread. Grid berisi semua thread untuk satu kernel. Block adalah grup thread yang bisa bekerja sama. Thread adalah unit eksekusi terkecil.Struktur ini fundamental untuk memetakan komputasi ke data. Penting: Thread di dalam satu Block bisa sinkronisasi, tapi antar-Block bersifat independen.
blockIdx, threadIdx, blockDimVariabel built-in di dalam kernel untuk mendapatkan ID unik dari thread dan block.Selalu digunakan di dalam kernel untuk menghitung indeks data mana yang harus dikerjakan oleh setiap thread. Formula idx = blockIdx.x * blockDim.x + threadIdx.x sangat esensial.
SM, Warp, dan SIMTSM: Prosesor di dalam GPU. Warp: Grup berisi 32 thread yang dieksekusi serempak. SIMT: Model eksekusi GPU (Single Instruction, Multiple Thread).Ini menjelaskan bagaimana hardware bekerja. Scheduler GPU mengeksekusi dalam satuan Warp, bukan thread individual.
Manajemen Memori
Hierarki MemoriCUDA punya berbagai jenis memori dengan kecepatan dan scope berbeda.Kunci performa adalah meminimalkan akses ke Global Memory yang lambat dan memaksimalkan penggunaan memori on-chip (Shared & Register) yang cepat.
Sinkronisasi & Penanganan Masalah
__syncthreads()Barrier sinkronisasi. Memastikan semua thread di dalam satu Block mencapai titik ini sebelum ada yang bisa lanjut.Wajib digunakan dalam Tiled Algorithm, yaitu setelah memuat data dari Global ke Shared Memory, dan sebelum mulai komputasi.
Operasi Atomik (e.g., atomicAdd)Operasi Read-Modify-Write yang dijamin aman dari race condition.Untuk mengatasi data race saat banyak thread perlu mengupdate lokasi memori yang sama. Contoh: pada pembuatan histogram.
Control DivergenceTerjadi ketika thread-thread dalam satu Warp mengambil jalur if-else yang berbeda.Ini adalah “pembunuh” performa karena GPU terpaksa menjalankan setiap jalur secara serial. Hindari kondisi percabangan yang bergantung pada threadIdx.
Teknik Optimasi Utama
Tiled Algorithm / BlockingPola Load-Sync-Compute. Thread block bekerja sama memuat “ubin” (tile) data dari Global ke Shared Memory untuk digunakan berulang kali.Teknik paling fundamental untuk mengubah algoritma yang memory-bound menjadi compute-bound. Sangat mengurangi bottleneck akses memori.
Memory CoalescingTerjadi ketika thread-thread dalam satu Warp mengakses lokasi memori Global yang berurutan dan berdekatan.Penting untuk mendapatkan throughput maksimal dari Global Memory. Desain pola akses data agar coalesced.

Tabel Detail Hierarki Memori CUDA

Tipe MemoriLokasiKecepatanScope AksesLifetimeDeklarasi & Penggunaan
RegistersOn-chipSangat CepatPer-ThreadPer-ThreadVariabel lokal biasa di dalam kernel.
Shared MemoryOn-chipSangat CepatPer-BlockPer-Blockshared int var;

Kunci untuk kerja sama antar-thread.
Global MemoryOff-chip (DRAM)LambatGrid (Semua Thread)AplikasiHasil dari cudaMalloc atau variabel global dengan __device__.
Constant MemoryOff-chip (di-cache)Cepat (jika hit)Grid (Read-Only)Aplikasiconstant int var;

Untuk data read-only yang diakses seragam.
Local MemoryOff-chip (DRAM)LambatPer-ThreadPer-ThreadTumpahan dari register (spilling) atau array lokal besar. Harus dihindari.