Kembali ke Kursus
AI024 Professional

Pengantar Pemrograman ROCm dan HIP: Tutorial Praktis

Panduan praktis dan modern tentang pemrograman GPU AMD dengan ROCm dan HIP. Mencakup seluruh tumpukan perangkat lunak, instalasi, alur kerja pembuatan, pemrograman kernel, manajemen memori, insinyur kinerja, penggunaan perpustakaan, porting CUDA, serta praktik debugging produksi.

5.0
30.0h
361 siswa
0 suka
Kecerdasan Buatan
Mulai Belajar

Gambaran Umum Kursus

📚 Ringkasan Konten

Panduan praktis dan modern tentang pemrograman GPU AMD dengan ROCm dan HIP. Meliputi seluruh tumpukan perangkat lunak, instalasi, alur pembuatan (build), pemrograman kernel, manajemen memori, rekayasa kinerja, penggunaan pustaka, porting CUDA, serta praktik debugging produksi.

Kuasai pemrograman GPU AMD dan portabilitas CUDA ke HIP melalui eksplorasi teknis mendalam ini.

Penulis: EvoClass

Ucapan Terima Kasih: Dokumentasi resmi AMD untuk ROCm dan HIP, termasuk proyek-proyek seperti ROCm, HIP, dan ROCm LLVM.

🎯 Tujuan Pembelajaran

  1. Menjelaskan HIP dan perannya dalam ekosistem ROCm dalam satu kalimat singkat dan padat.
  2. Membedakan antara ROCm (platform), HIP (antarmuka), dan pustaka ROCm (komponen dasar).
  3. Mengidentifikasi lapisan hierarkis arsitektur ROCm dari perangkat keras hingga kerangka aplikasi.
  4. Menjelaskan hubungan antara SDK HIP dan platform ROCm di berbagai sistem operasi.
  5. Melaksanakan alur instalasi yang sistematis, termasuk verifikasi matriks dukungan dan konfigurasi path pasca-instalasi.
  6. Mengompilasi dan menjalankan program verifikasi minimal untuk menangani masalah umum terkait driver dan akses lingkungan.
  7. Memahami mengapa strategi pembuatan yang kuat sangat penting untuk menyelaraskan portabilitas sumber dengan kinerja khusus arsitektur.
  8. Menerapkan pemanggilan kernel portabel menggunakan makro hipLaunchKernelGGL sebagai alternatif dari sintaks triple-angle-bracket pada CUDA.
  9. Mengonfigurasi proyek CMake tingkat produksi yang menargetkan arsitektur ROCm tertentu dan mengelola dependensi pustaka eksternal.
  10. Mendefinisikan anatomi kernel HIP dan menerapkan rumus eksekusi dasar untuk indeks thread.

🔹 Pelajaran 1: Pengantar Arsitektur ROCm dan HIP

Ringkasan: Pelajaran ini memberikan gambaran dasar tentang platform ROCm dan bahasa pemrograman HIP. Menjelaskan hubungan antara tumpukan ROCm lengkap, antarmuka HIP, dan pustaka tingkat tinggi, sekaligus membentuk harapan realistis mengenai portabilitas CUDA ke AMD serta rekayasa kinerja.

Hasil Pembelajaran:

  • Menjelaskan HIP dan perannya dalam ekosistem ROCm dalam satu kalimat singkat dan padat.
  • Membedakan antara ROCm (platform), HIP (antarmuka), dan pustaka ROCm (komponen dasar).
  • Mengidentifikasi lapisan hierarkis arsitektur ROCm dari perangkat keras hingga kerangka aplikasi.

🔹 Pelajaran 2: Instalasi dan Pengaturan Lingkungan

Ringkasan: Pelajaran ini membimbing pengembang GPU dan insinyur HPC melalui strategi penting untuk menyiapkan lingkungan siap-HIP di platform Linux maupun Windows. Menekankan pendekatan "realitas platform" di mana pengembang harus memverifikasi kompatibilitas perangkat keras/perangkat lunak sebelum melanjutkan ke alur instalasi yang terstruktur dan verifikasi akhir menggunakan kompiler hipcc.

Hasil Pembelajaran:

  • Menjelaskan hubungan antara SDK HIP dan platform ROCm di berbagai sistem operasi.
  • Melaksanakan alur instalasi yang sistematis, termasuk verifikasi matriks dukungan dan konfigurasi path pasca-instalasi.
  • Mengompilasi dan menjalankan program verifikasi minimal untuk menangani masalah umum terkait driver dan akses lingkungan.

🔹 Pelajaran 3: Toolchain Pembuatan: hipcc dan Tata Letak Proyek

Ringkasan: Pelajaran ini mengeksplorasi toolchain esensial dan strategi organisasi untuk mengembangkan aplikasi HIP di hardware AMD. Berpindah dari pembuatan command-line sederhana menggunakan driver hipcc menuju konfigurasi proyek profesional tingkat produksi menggunakan CMake. Fokus utama mencakup makro pemanggilan kernel portabel, optimasi khusus arsitektur, serta perbedaan kritis antara portabilitas tingkat sumber dan performa biner.

Hasil Pembelajaran:

  • Memahami mengapa strategi pembuatan yang kuat sangat penting untuk menyelaraskan portabilitas sumber dengan kinerja khusus arsitektur.
  • Menerapkan pemanggilan kernel portabel menggunakan makro hipLaunchKernelGGL sebagai alternatif dari sintaks triple-angle-bracket pada CUDA.
  • Mengonfigurasi proyek CMake tingkat produksi yang menargetkan arsitektur ROCm tertentu dan mengelola dependensi pustaka eksternal.

🔹 Pelajaran 4: Model Pemrograman HIP dan Pengembangan Kernel

Ringkasan: Pelajaran ini mengeksplorasi arsitektur dasar kernel HIP, berfokus pada bagaimana pekerjaan dipetakan dari masalah logis ke eksekusi perangkat keras melalui grid dan blok. Memberikan pedoman untuk pemrograman GPU yang kuat, mencakup rumus eksekusi dasar, bottleneck kinerja (memori vs. komputasi), serta implementasi wajib untuk penanganan kesalahan dan sinkronisasi dalam kode siap produksi.

Hasil Pembelajaran:

  • Mendefinisikan anatomi kernel HIP dan menerapkan rumus eksekusi dasar untuk indeks thread.
  • Mengonfigurasi ukuran grid dan blok secara efektif serta menerapkan benchmarking untuk menemukan throughput optimal.
  • Menerapkan makro penanganan kesalahan yang robust dan menerapkan semantik sinkronisasi untuk mengelola interaksi perangkat-host.

🔹 Pelajaran 5: Manajemen Memori dan Pola Data

Ringkasan: Pelajaran ini berfokus pada pilar utama pemrograman GPU: manajemen memori. Mencakup klasifikasi jenis memori (Pageable, Pinned, Device, dan Managed), implikasi performa dari mekanisme transfer data, serta peran krusial pola akses memori—khususnya coalescing—dalam mencapai performa maksimal. Siswa akan belajar menyeimbangkan kemudahan penggunaan yang ditawarkan oleh memori terkelola dengan kontrol eksplisit yang dibutuhkan untuk aplikasi HPC berkinerja tinggi.

Hasil Pembelajaran:

  • Membedakan antara memori host pageable dan pinned, serta mengidentifikasi kapan menggunakan masing-masing untuk kecepatan transfer optimal.
  • Menerapkan alokasi memori perangkat dan memori terpadu/terkelola menggunakan API HIP (hipMalloc, hipHostMalloc, hipMallocManaged).
  • Menganalisis pola akses memori untuk memastikan akses coalesced dan menghindari bottleneck kinerja seperti akses berselang (strided access).

🔹 Pelajaran 6: Stream, Event, dan Eksekusi Asinkron

Ringkasan: Pelajaran ini mengalihkan pengembang dari model pemrograman sinkron ke pola pikir konkuren, fokus pada cara memaksimalkan penggunaan GPU melalui stream dan event HIP. Membahas mekanisme overlaping transfer data dengan eksekusi kernel melalui pipeline chunked, serta memperkenalkan trade-off antara capture stream dan konstruksi graf eksplisit. Selain itu, menyoroti pertimbangan produksi krusial, termasuk penggunaan pustaka aman graf dan pengukuran waktu presisi tinggi di GPU.

Hasil Pembelajaran:

  • Mengidentifikasi manfaat kinerja eksekusi asinkron dan stream konkuren dibandingkan eksekusi sinkron.
  • Menerapkan pipeline chunked untuk mengoverlap komunikasi host-ke-device dengan komputasi kernel.
  • Membedakan antara capture stream dan konstruksi graf eksplisit untuk mengurangi beban panggilan.

🔹 Pelajaran 7: Rekayasa Kinerja pada GPU AMD

Ringkasan: Pelajaran ini membangun kerangka ilmiah untuk mengoptimalkan perangkat lunak pada hardware AMD, berpindah dari tebakan menjadi pendekatan sistematis yang didukung pengukuran. Mencakup hubungan arsitektural antara Compute Units, wavefronts, dan tekanan register, serta memberikan metodologi praktis untuk profiling dengan rocprofv3 dan implementasi kerangka benchmark yang kuat.

Hasil Pembelajaran:

  • Menerapkan alur optimasi HIP 6 langkah untuk mengidentifikasi dan menyelesaikan bottleneck kinerja.
  • Menganalisis trade-off antara tekanan register dan occupancy untuk memaksimalkan penggunaan perangkat keras.
  • Melakukan pengukuran kinerja yang akurat menggunakan event perangkat keras dan praktik terbaik benchmarking multi-iterasi.

🔹 Pelajaran 8: Ekosistem Pustaka ROCm

Ringkasan: Pelajaran ini memperkenalkan filosofi rekayasa "Library-first", yang memprioritaskan pustaka ROCm berkinerja tinggi dan siap pakai daripada pengembangan kernel kustom. Mencakup klasifikasi tumpukan pustaka ROCm (Matematika, FFT, Primitif, dan ML/AI) serta memberikan kerangka keputusan untuk memilih antara antarmuka hip* portabel dan implementasi native AMD roc*. Selain itu, peserta akan mengeksplorasi persyaratan krusial "graf aman" saat mengintegrasikan pustaka ke dalam alur kerja HIP yang menggunakan capture graf.

Hasil Pembelajaran:

  • Menerapkan prinsip rekayasa "Library-first" untuk membenarkan penggunaan primitif yang telah diuji daripada kernel kustom.
  • Membedakan antara pustaka hip* dan roc* berdasarkan kebutuhan portabilitas dan performa.
  • Mengkategorikan pustaka ROCm ke domain fungsional masing-masing (Matematika, FFT, Primitif, ML/AI).

🔹 Pelajaran 9: Porting Aplikasi CUDA ke HIP

Ringkasan: Pelajaran ini membahas transisi sistematis dari kode sumber CUDA ke kerangka HIP C++ yang portabel. Siswa akan belajar melaksanakan alur porting bertahap menggunakan alat otomatis seperti hipify-perl dan hipify-clang, mengidentifikasi jebakan portabilitas kritis seperti asumsi warpSize khusus perangkat keras, serta menerapkan proses validasi ketat untuk membandingkan performa dan kebenaran setelah migrasi.

Hasil Pembelajaran:

  • Melaksanakan alur porting bertahap 6 langkah untuk meminimalkan beban debugging.
  • Memilih dan menerapkan alat translasi otomatis yang sesuai (hipify-perl vs. hipify-clang) berdasarkan kompleksitas kode sumber.
  • Mengidentifikasi dan menyelesaikan "jebakan portabilitas" sensitif arsitektur, khususnya yang melibatkan warpSize dan kesalahan translasi mekanis.

🔹 Pelajaran 10: Debugging, Pengujian, dan Praktik Produksi

Ringkasan: Pelajaran ini membahas alat dan metodologi penting untuk memindahkan kernel GPU dari tahap pengembangan ke produksi pada platform ROCm. Menjelaskan penggunaan ROCgdb dan AddressSanitizer untuk deteksi kesalahan, menetapkan strategi pengujian empat-lapis yang ketat, serta memberikan daftar cek produksi untuk memastikan kebenaran kernel dan stabilitas kinerja.

Hasil Pembelajaran:

  • Menggunakan ROCgdb, ltrace, dan AddressSanitizer untuk mengidentifikasi bug tingkat sumber dan kesalahan akses memori dalam kode GPU.
  • Menerapkan strategi pengujian empat-lapis untuk memvalidasi helper, kebenaran kernel, kasus batas, dan regresi kinerja.
  • Menerapkan pola kode produksi dan daftar cek untuk mengelola antarmuka kernel, dokumentasi, serta debugging yang didorong lingkungan.