Kembali ke Kursus
AI032 Professional

Pemrograman Prosesor Paralel Secara Massal: Pendekatan Praktik

Kursus ini menyediakan pengantar komprehensif tentang pemrograman GPU dan pemrograman paralel menggunakan lingkungan CUDA C. Kursus ini mencakup arsitektur GPU, paralelisme data, manajemen thread, optimasi memori, serta pertimbangan kinerja lanjutan, yang diilustrasikan melalui studi kasus dunia nyata seperti rekonstruksi MRI dan visualisasi molekuler.

4.9
36.0h
569 siswa
0 suka
Kecerdasan Buatan
Mulai Belajar

Gambaran Umum Kursus

📚 Ringkasan Konten

Kursus ini menyediakan pengantar komprehensif tentang komputasi GPU dan pemrograman paralel menggunakan lingkungan CUDA C. Materi mencakup arsitektur GPU, paralelisme data, manajemen thread, optimasi memori, serta pertimbangan kinerja tingkat lanjut, dilustrasikan melalui studi kasus dunia nyata seperti rekonstruksi MRI dan visualisasi molekuler.

Menguasai seni komputasi paralel berkinerja tinggi dengan panduan praktis dan langsung mengenai CUDA serta arsitektur GPU.

Penulis: David B. Kirk, Wen-mei W. Hwu

Ucapan Terima Kasih: Ian Buck, John Nickolls, tim NVIDIA DevTech, Jensen Huang, David Luebke, Bill Bean, Simon Green, Mark Harris, Manju Hedge, Nadeem Mohammad, Brent Oster, Peter Shirley, Eric Young, dan Cyril Zeller.

🎯 Tujuan Pembelajaran

  1. Membedakan filosofi desain dan tren kinerja antara CPU multikonek dan GPU many-core.
  2. Mengidentifikasi komponen utama dari arsitektur GPU modern, termasuk Streaming Multiprocessors (SMs) dan struktur memori.
  3. Menerapkan Hukum Amdahl untuk menghitung kecepatan teoretis dan mengidentifikasi dampak bottleneck sekuensial.
  4. Membandingkan perbedaan arsitektural antara pipeline tetap dan array prosesor terprogram seragam.
  5. Menjelaskan peran "GPGPU" sebagai langkah perantara dan keterbatasan model pemrograman shader awal.
  6. Menganalisis bagaimana fitur perangkat keras seperti operasi atomik, sinkronisasi barier, dan dukungan presisi ganda mendorong transisi ke komputasi umum berskala besar.
  7. Mengidentifikasi dan memanfaatkan paralelisme data dalam algoritma perkalian matriks-matriks.
  8. Melaksanakan manajemen memori perangkat termasuk alokasi, transfer data antara host dan perangkat, serta dealokasi.
  9. Membangun dan menjalankan kernel CUDA menggunakan indeks thread dan konfigurasi grid/block yang sesuai.
  10. Merancang hierarki thread multidimensi (Grid dan Block) untuk memetakan struktur data kompleks ke perangkat keras GPU.

🔹 Pelajaran 1: Pengantar Komputasi Paralel dan Arsitektur GPU

Ringkasan: Pelajaran ini mengeksplorasi pergeseran fundamental dari komputasi sekuen ke paralel, didorong oleh perbedaan filosofi desain antara CPU dan GPU. Siswa akan meninjau jalur "Multikonek" versus "Many-core", memahami arsitektur perangkat keras yang memungkinkan GPU mencapai throughput besar, serta belajar kendala matematis kecepatan melalui Hukum Amdahl.

Hasil Pembelajaran:

  • Membedakan filosofi desain dan tren kinerja antara CPU multikonek dan GPU many-core.
  • Mengidentifikasi komponen utama dari arsitektur GPU modern, termasuk Streaming Multiprocessors (SMs) dan struktur memori.
  • Menerapkan Hukum Amdahl untuk menghitung kecepatan teoretis dan mengidentifikasi dampak bottleneck sekuensial.

🔹 Pelajaran 2: Evolusi dan Masa Depan Komputasi GPU

Ringkasan: Pelajaran ini melacak perjalanan arsitektur Graphics Processing Unit (GPU) dari perangkat keras khusus tetap untuk rendering segitiga hingga status saat ini sebagai prosesor paralel umum yang kuat dan terpadu. Siswa akan mengeksplorasi pergeseran dari pipeline grafis kaku ke shader terprogram, munculnya gerakan GPGPU, dan arsitektur skalabel modern yang mendorong simulasi ilmiah dan teknik saat ini.

Hasil Pembelajaran:

  • Membandingkan perbedaan arsitektural antara pipeline tetap dan array prosesor terprogram seragam.
  • Menjelaskan peran "GPGPU" sebagai langkah perantara dan keterbatasan model pemrograman shader awal.
  • Menganalisis bagaimana fitur perangkat keras seperti operasi atomik, sinkronisasi barier, dan dukungan presisi ganda mendorong transisi ke komputasi umum berskala besar.

🔹 Pelajaran 3: Struktur Program CUDA dan Manajemen Memori

Ringkasan: Pelajaran ini membahas arsitektur dasar program CUDA, menekankan perbedaan antara eksekusi Host (CPU) dan Device (GPU). Siswa akan belajar mengenali paralelisme data dalam operasi matriks, mengelola ruang memori terpisah menggunakan API CUDA, serta mengorganisir eksekusi paralel melalui hierarki grid, block, dan thread menggunakan gaya Single-Program, Multiple-Data (SPMD).

Hasil Pembelajaran:

  • Mengidentifikasi dan memanfaatkan paralelisme data dalam algoritma perkalian matriks-matriks.
  • Melaksanakan manajemen memori perangkat termasuk alokasi, transfer data antara host dan perangkat, serta dealokasi.
  • Membangun dan menjalankan kernel CUDA menggunakan indeks thread dan konfigurasi grid/block yang sesuai.

🔹 Pelajaran 4: Thread dan Penjadwalan CUDA Tingkat Lanjut

Ringkasan: Pelajaran ini mengeksplorasi organisasi hierarkis thread dalam CUDA, berfokus pada bagaimana indeks multidimensi dipetakan ke data fisik dan sumber daya perangkat keras. Ini menjelaskan mekanisme sinkronisasi barier dan skalabilitas yang transparan, diakhiri dengan prinsip-prinsip arsitektur penugasan thread dan penjadwalan berbasis warp untuk mencapai toleransi latensi dalam komputasi berkinerja tinggi.

Hasil Pembelajaran:

  • Merancang hierarki thread multidimensi (Grid dan Block) untuk memetakan struktur data kompleks ke perangkat keras GPU.
  • Melaksanakan indeks data yang tepat menggunakan variabel built-in CUDA (blockIdx, threadIdx, blockDim).
  • Menerapkan sinkronisasi barier untuk memastikan integritas data sambil mempertahankan skalabilitas yang transparan di berbagai arsitektur GPU.

🔹 Pelajaran 5: Optimasi Memori dan Tiling Memori Bersama

Ringkasan: Pelajaran ini mengeksplorasi bagaimana bandwidth memori dan keterbatasan sumber daya menjadi penghalang utama dalam komputasi paralel. Ini mendetailkan penggunaan "tiling" untuk mengurangi lalu lintas memori global dan menjelaskan peran kritis barier sinkronisasi (__syncthreads()) serta pilihan strategis antara register dan memori bersama untuk mengoptimalkan kinerja.

Hasil Pembelajaran:

  • Menganalisis bagaimana batas register dan memori bersama menentukan tingkat paralelisme (occupancy) dalam kernel.
  • Mengkuantifikasi pengurangan konsumsi bandwidth memori global yang dicapai melalui teknik tiling.
  • Mengidentifikasi keharusan fungsi sinkronisasi untuk menjaga integritas data selama akses memori bersama.

🔹 Pelajaran 6: Analisis Kinerja dan Eksekusi SIMT

Ringkasan: Pelajaran ini mengeksplorasi pertimbangan arsitektural dan algoritmik penting untuk mengoptimalkan kernel CUDA. Ini beralih dari model eksekusi dasar—khususnya unit Single-Instruction, Multiple-Thread (SIMT) dan partisi warp—menuju teknik penyesuaian kinerja tingkat lanjut termasuk coalescing memori, perkalian matriks ber-tiling, dan partisi dinamis sumber daya Streaming Multiprocessor (SM).

Hasil Pembelajaran:

  • Menganalisis pemetaan blok thread multidimensi ke urutan eksekusi linear warp perangkat keras.
  • Menilai dan meminimalkan divergensi aliran kontrol dalam algoritma reduksi paralel.
  • Mengoptimalkan bandwidth memori global dengan menerapkan pola akses memori coalescing dan ber-tiling.

🔹 Pelajaran 7: Aritmetika Titik Mengambang dan Akurasi Numerik

Ringkasan: Pelajaran ini membahas arsitektur dasar bilangan titik mengambang, fokus pada komponen standar IEEE 754: tanda, eksponen yang dikodekan secara ekses, dan mantisa normal. Siswa akan mengeksplorasi bagaimana pola bit ini dipetakan ke garis bilangan diskret dan bagaimana keterbatasan representasi ini memengaruhi akurasi algoritma kompleks seperti penjumlahan skala besar.

Hasil Pembelajaran:

  • Mendekonstruksi format titik mengambang untuk menghitung nilai numerik dari pola bit menggunakan representasi normal dan enkode ekses.
  • Memvisualisasikan distribusi bilangan yang dapat direpresentasikan pada garis bilangan dan menjelaskan dampak alokasi bit antara eksponen dan mantisa.
  • Mengkuantifikasi ketidakakuratan numerik menggunakan ULP dan mengidentifikasi bagaimana mode pembulatan yang berbeda berkontribusi terhadap kesalahan.

🔹 Pelajaran 8: Studi Kasus: Paralelisasi Rekonstruksi MRI

Ringkasan: Pelajaran ini mengeksplorasi paralelisasi rekonstruksi MRI tingkat lanjut pada GPU. Fokusnya adalah pada proses rekonsruksi iteratif untuk lintasan non-Cartesian, khususnya mengoptimalkan kernel komputasi intensif F^H d melalui transformasi loop, manajemen memori konstan, pengaturan ulang tata letak data, serta penggunaan fungsi trigonometri yang dipercepat perangkat keras.

Hasil Pembelajaran:

  • Memahami transisi dari rekonstruksi berbasis FFT Cartesius ke algoritma berbasis solver linear iteratif untuk data k-space non-Cartesian.
  • Menerapkan fusi loop dan pertukaran loop untuk mengubah kode C sekuen menjadi struktur yang sesuai untuk pemetaan thread CUDA masif.
  • Mengoptimalkan throughput memori menggunakan chunking memori konstan dan tata letak data Array-of-Structs (AoS).

🔹 Pelajaran 9: Studi Kasus: Visualisasi Molekuler dan Eksekusi Multi-GPU

Ringkasan: Pelajaran ini mengeksplorasi penerapan praktis komputasi GPU pada visualisasi molekuler, khususnya menggunakan metode Direct Coulomb Summation (DCS) untuk menghitung peta potensi elektrostatik. Siswa akan berkembang dari implementasi kernel dasar hingga versi yang sangat dioptimalkan yang memanfaatkan unrolling instruksi, coalescing memori, dan padding.

Hasil Pembelajaran:

  • Menerapkan kernel Direct Coulomb Summation (DCS) menggunakan memori konstan CUDA dan teknik penyembunyian latensi memori global.
  • Mengoptimalkan kinerja kernel melalui unrolling instruksi dan penggunaan ulang perhitungan koordinat umum.
  • Menerapkan strategi coalescing dan padding untuk menyesuaikan akses memori global GPU demi memaksimalkan bandwidth.

🔹 Pelajaran 10: Berpikir Komputasional dan Pemilihan Algoritma Paralel

Ringkasan: Pelajaran ini mengeksplorasi transisi dari pemikiran sekuen ke pemecahan masalah paralel dengan fokus pada tujuan pemrograman paralel dan pemilihan strategis algoritma. Siswa akan belajar memecah masalah menjadi unit yang dapat diparalelkan, menerapkan pemikiran komputasional untuk menutup celah antara ilmu domain dan arsitektur perangkat keras, serta mengevaluasi kinerja algoritma.

Hasil Pembelajaran:

  • Mengidentifikasi tujuan utama pemrograman paralel dan menghitung kecepatan teoretis menggunakan Hukum Amdahl.
  • Membedakan antara dekomposisi tingkat tugas dan dekomposisi tingkat data serta menerapkan strategi berbasis atom (scatter) versus berbasis grid (gather).
  • Menilai dan memilih algoritma paralel berdasarkan kriteria seperti bandwidth memori, kompleksitas komputasi, dan keterbatasan arsitektur.

🔹 Pelajaran 11: Pengantar Model Pemrograman OpenCL

Ringkasan: Pelajaran ini memperkenalkan OpenCL sebagai kerangka kerja untuk komputasi paralel heterogen, dengan fokus pada model paralelisme data dan abstraksi perangkat keras hierarkis. Siswa akan belajar memetakan NDRange dan struktur memori OpenCL ke ekivalen CUDA serta menguasai manajemen perangkat sisi host melalui model kompilasi dinamis.

Hasil Pembelajaran:

  • Memetakan paralelisme dan hierarki memori OpenCL ke arsitektur spesifik CUDA (misalnya, memetakan Work-groups ke Blocks dan Local Memory ke Shared Memory).
  • Menerapkan fungsi kernel OpenCL dan mengelola lingkungan eksekusi sisi host menggunakan Context dan Command Queues.
  • Menjalankan alur kompilasi dinamis untuk membangun kernel dari kode sumber saat runtime.

🔹 Pelajaran 12: Fitur GPU Modern dan Outlook Masa Depan

Ringkasan: Pelajaran ini mengeksplorasi evolusi arsitektural dan fungsional GPU, dengan fokus pada transisi menuju manajemen memori canggih, kemampuan eksekusi kernel yang ditingkatkan, serta peningkatan performa inti. Siswa akan meninjau bagaimana fitur-fitur seperti Unified Device Memory Space dan panggilan fungsi tingkat kernel mendorong GPU menjadi prosesor umum.

Hasil Pembelajaran:

  • Menjelaskan signifikansi Evolusi Arsitektur Memori dan pergeseran menuju Ruang Memori Perangkat Seragam 64-bit.
  • Menganalisis bagaimana Operasi Atomik yang Ditingkatkan dan Panggilan Fungsi Tingkat Kernel memungkinkan implementasi struktur data dan algoritma kompleks.
  • Menilai dampak kinerja dari Simultaneous Kernel Execution, peningkatan kecepatan presisi ganda, dan Efisiensi Aliran Kendali dalam lingkungan GPU modern.