31 poin oleh GN⁺ 2025-06-10 | 2 komentar | Bagikan ke WhatsApp
  • Ingin tahu buku/kursus/proyek apa yang sebaiknya diambil untuk mempelajari pemrograman CUDA (karena banyak perusahaan yang ingin saya lamar mensyaratkan pengalaman CUDA)

Ringkasan jawaban dari HN

  • Materi belajar dan langkah awal

    • Merekomendasikan CUDA Programming Guide resmi dari NVIDIA dan arsip buku NVIDIA
    • Mulai dari program contoh kecil lalu secara bertahap berlatih paralelisasi; pengetahuan C/C++ yang sudah ada sangat penting
    • Manfaatkan kode open source (GitHub, dll.) dan LLM (misalnya ChatGPT) untuk menafsirkan struktur kode dan berlatih
    • Disarankan pendekatan yang berfokus pada praktik dengan rencana sekitar 6–8 minggu
  • Perangkat keras dan lingkungan yang dibutuhkan

    • GPU NVIDIA keluaran 10 tahun terakhir umumnya sudah cukup, terutama Turing/RTX 20xx, Ampere/RTX 30xx ke atas; model lama (sebelum Maxwell) punya keterbatasan dukungan dan performa
    • Gunakan versi terbaru CUDA Toolkit, dan wajib memeriksa Compute Capability GPU (lihat tabel dukungan)
    • Bisa di Windows maupun Linux, dan tergantung lingkungan, Docker serta VPS juga dapat dimanfaatkan
    • Jika tidak punya GPU, bisa mencoba emulator online seperti leetgpu.com
  • Dasar-dasar pemrograman paralel

    • Dibanding sintaks CUDA itu sendiri, pemahaman tentang algoritma paralel dan arsitektur perangkat keras jauh lebih penting
    • Buku yang sering direkomendasikan:
      • Programming Massively Parallel Processors (PMPP)
      • Foundations of Multithreaded, Parallel, and Distributed Programming
      • Scientific Parallel Computing
      • The Art of High Performance Computing (Victor Eijkhout, gratis)
    • Kebutuhan kerja nyata pada CUDA biasanya berfokus pada pemanfaatan library berbasis CUDA seperti cuBLAS dan cuDNN serta memaksimalkan performa paralel
  • Metodologi belajar

    • Alih-alih hanya belajar sintaks, pendekatan mem-porting kode CPU kecil ke CUDA → benchmark performa → optimasi bertahap lebih disarankan
    • Awalnya fokus pada ketepatan hasil, lalu terapkan optimasi performa secara bertahap (manajemen memori, shared memory, pemakaian register, dll.)
    • Contoh latihan: prefix scan, GEMM, n-body simulation, dan algoritma paralel klasik lainnya
    • Pelajari dulu library abstraksi tingkat tinggi seperti CUDA Thrust, CUTLASS, dan cub; implementasi langsung bisa dicoba belakangan
  • Praktik kerja dan karier

    • Persyaratan pengalaman CUDA paling sering muncul di bidang deep learning, data engineering, HPC (komputasi ilmiah), game graphics, dll.
    • Ada juga posisi yang tidak sekadar memakai PyTorch/Tensorflow, tetapi menuntut pengalaman mengoptimalkan kernel/library inti CUDA
    • Untuk membangun keahlian praktis, kemampuan menggunakan tool low-level seperti PTX, nvcc, cuobjdump, dan Nsight Systems/Compute juga penting
    • Partisipasi komunitas: gpumode Discord, GPU Puzzles, dan komunitas aktif lain untuk code review serta diskusi praktik nyata
  • Perhatian dan saran realistis

    • Memulainya memang mudah, tetapi optimasi lintas perangkat keras (arsitektur/instruction set) dan menjaga kompatibilitas sangat sulit, sehingga hambatan masuknya tinggi
    • Dalam praktiknya, pengalaman kerja dan jaringan tetap penting, dan belajar mandiri saja tidak bisa sepenuhnya menggantikan pengalaman industri
    • CUDA adalah bidang tempat perangkat keras, komputasi paralel, algoritma, dan optimasi saling terkait, jadi disarankan memilih satu area untuk didalami secara fokus

2 komentar

 
ahwjdekf 2025-06-12

Entahlah. Mungkin memang ada kalanya perlu menggunakan CUDA secara langsung. Terutama di Korea, sih.

 
GN⁺ 2025-06-10
Opini Hacker News
  • Sebagai peserta NVidia cudacontest 2008, dan salah satu dari sedikit orang yang mengirimkan dari India serta pernah menerima hadiah partisipasi BlackEdition Card, saya membagikan metode yang saya ikuti

    • Rujuk NVidia CUDA Programming Guide
    • Manfaatkan buku-buku tentang CUDA Programming yang diterbitkan NVidia (lihat developer.nvidia.com/cuda-books-archive)
    • Mulai dengan menulis program kecil berdasarkan implementasi yang sudah ada (kemampuan implementasi bahasa C yang kuat sangat penting, jadi sebaiknya ditinjau ulang bila perlu)
    • Diasumsikan toolchain, compiler, dan hardware kerja yang diperlukan sudah tersedia
    • Analisis kode proyek CUDA di Github, dan sekarang juga bisa memanfaatkan LLM untuk meminta penjelasan kode
    • Mulai dari program kecil berbasis pemrosesan paralel lalu perluas secara bertahap
    • Jika dijalani dengan tenang selama 1–2 bulan, sudah cukup untuk mulai pemrograman CUDA
    • Saat ini lingkungan jauh lebih kaya materi dan sumber daya dibanding 2007/08
    • Disarankan membuat lalu menjalankan rencana belajar 6–8 minggu
    • Jika meninggalkan pertanyaan kapan saja, saya bisa membantu semaksimal mungkin
      • Penasaran soal hardware yang dibutuhkan secara lebih spesifik. Apakah kartu grafis Nvidia keluaran sekitar 5 tahun lalu sudah cukup, atau perlu spesifikasi yang lebih khusus?
      • Penasaran lingkungan pengembangan apa yang digunakan. Ingin memastikan apakah Windows masih menjadi lingkungan pengembangan utama untuk CUDA
  • Setelah melihat langsung kode CUDA Leela Chess Zero, ternyata masih pada tingkat yang bisa dipahami

    • Saat itu Leela memakai arsitektur DCNN alih-alih transformer, dan dasar-dasar DCNN mudah dipelajari lewat video fast.ai
    • Transformer lebih kompleks sehingga saya sendiri belum mulai mempelajarinya
    • Bahasa CUDA sendiri berbasis C++, jadi kalau punya pengalaman C++ tidak terlalu sulit untuk mulai
    • Namun jika ingin menjadi pengembang CUDA, kebutuhan untuk mencapai level pemrograman AI sangat besar—AI adalah bidang yang jauh lebih dalam dan luas daripada CUDA, jadi butuh banyak waktu dan pengalaman praktik
    • Meski begitu, kalau sudah punya kemampuan, permintaan pasar sangat tinggi
    • Sangat merekomendasikan video fast.ai
    • Kalau di bidang game, pembahasan akan berlanjut ke grafis 3D, tetapi belakangan situasinya jauh lebih rumit sehingga saya tidak tahu jalur masuknya
      • Pertanyaan apakah mencari kerja sebagai pengembang CUDA saat ini lebih ringan bebannya dibanding bidang software engineer lain. Sebagai pengembang middleware Java saat ini, ada pendapat bahwa CUDA dan AI tampak bagus untuk transisi karier
      • Permintaan konfirmasi apakah kode ini yang dimaksud di sini, serta dua pertanyaan pemula
        • Mengapa menulis C++/CUDA secara langsung; apakah sekadar memakai pytorch atau tensorflow tidak cukup cepat untuk melatih Leela?
        • Dan karena juga ada kode tensorflow, kenapa demikian?
  • Jika motivasinya uang, disarankan melewati HPC dan area yang sangat matematis

    • Di bidang itu, kalau bukan level doktor, sulit mendapat perhatian meski kemampuan sangat bagus
    • Keahlian yang benar-benar menghasilkan uang adalah menguasai tool seperti PTX, nvcc, cuobjdump, Nsight Systems, Nsight Compute, lalu menganalisis codebase open source seperti CUTLASS
    • Disarankan melihat catatan praktik terkait
    • Yang terpenting, jangan hanya bertahan di HN; disarankan ikut komunitas discord gpu mode, tempat para pengembang sungguhan berkumpul
      • Terlihat keren dan praktis, tetapi juga tampak sangat niche
      • Masuk ke bidang ini sendiri sulit, dan hanya dipakai di area terbatas seperti industri game atau driver
      • Disebutkan bahwa untuk langsung sampai ke level itu sejak awal, perlu bakat yang cukup besar
  • Sumber daya gpumode.com dan komunitas Discord-nya cukup untuk menyediakan bahan belajar selama berbulan-bulan

    • Buku Programming massively parallel processors
    • Dokumentasi resmi nvidia cuda sangat komprehensif
    • GPU-Puzzles juga direkomendasikan untuk dicoba
      • Melihat contoh kode ThunderKittens flashattention-2 memberi gambaran betapa sulitnya menjelaskan kompleksitas kode seperti itu dengan kata-kata
      • Ada anggapan bahwa puzzle semacam ini bersifat 'winner-takes-all', sehingga perbedaan pencapaian nyata kurang dari 1%, dan praktiknya sendiri tidak terlalu bermakna
  • Disarankan memecah cakupan belajar agar lebih mudah diakses

      1. Pelajari CUDA itu sendiri (framework/library/lapisan abstraksi)
      1. Dasar-dasar high-performance computing (ini berlaku luas pada arsitektur HPC secara keseluruhan, bukan hanya konsep GPU dan Nvlink)
      1. Spesialisasi bidang aplikasi (jika transformer, mulai dari abstraksi tingkat tinggi modern seperti Torch, Tensorflow, dan sejenisnya)
    • Jika benar-benar ingin menguasai CUDA, kuncinya adalah mengalami dan memahami prinsip pemrograman paralel skala besar, dan banyak di antaranya merupakan skill yang portabel
      • Sebagai mantan pengembang GPU, saya juga memberi saran yang sama, terutama menekankan poin 2 dan 3
      • Tergantung tujuan kerja, yang benar-benar dibutuhkan mungkin justru pengalaman dengan library CUDA (cuDNN, cuBLAS, cuFFT, dll.)
      • Memahami prinsip pemrograman paralel adalah prioritas utama
      • Pendekatan ini adalah jawaban yang tepat; kalau langsung mulai dari poin 1 tanpa poin 2, hanya akan menambah kebingungan
      • Panduan buku rekomendasi
  • Berbagi pengalaman pribadi dalam proses belajar CUDA

    • Tidak terlalu sistematis, tetapi cara ini membantu di dunia akademik dan riset
    • Saya perlu belajar CUDA secara langsung karena proyek doktoral
    • Karena tidak ada seorang pun di lab yang berpengalaman, saya mempelajari dasar konsep lewat kursus dasar NVIDIA (Getting Started with Accelerated Computing with CUDA C/C++ serta versi python-nya)
    • Di luar tutorial resmi, pada praktiknya saya banyak belajar lewat trial and error
    • Saya memakai tutorial online dan buku, tetapi fungsi atau API cepat berubah sehingga sering bingung antara versi lama dan baru, ditambah harus memperhatikan isu kompatibilitas dengan GPU saya dan lingkungan nyata
    • Bagian tersulit adalah bahwa sebagian besar waktu habis untuk debugging (melacak penyebab kenapa lebih lambat dari perkiraan) dan memakai tool (misalnya "compute-sanitizer", Nsight)
    • Jangan terburu-buru; disarankan mem-porting proyek sederhana yang berjalan di CPU ke CUDA lalu melakukan benchmark sambil menumpuk pengalaman optimisasi
    • Optimisasi dilakukan paling akhir; prioritaskan dulu implementasi yang berjalan benar
    • Kernel yang lambat tetapi tidak merusak memori lebih berharga daripada kernel yang sudah dioptimalkan
      • Berbagi pengalaman doktoral yang mirip—hasil praktik flashrnn
      • Jika sudah memahami prinsip dasar dan struktur GPU, workflow yang direkomendasikan adalah
        1. Siapkan lingkungan tempat kernel bisa diuji, lalu bandingkan dengan baseline dari bahasa tingkat lebih tinggi
        2. Jika tidak ada proyek mendesak, ulangi atau implementasikan ulang masalah klasik yang terkenal (seperti MatMul)—jangan mencoba semua kasus sekaligus, fokus per fungsi
        3. Naikkan kompleksitas secara bertahap—loop, paralelisasi grid, lalu gunakan memori global/shared/register secara berurutan, berkembang dari perkalian matriks sederhana ke TensorCore (MMA)
        4. Baca ulang CUDA C Programming Guide berkali-kali—ini baru benar-benar meresap ketika dipraktikkan
        5. Abstraksi tingkat lebih tinggi seperti CUTLASS, ThunderKitten, dll. juga direkomendasikan tergantung kasus; jika berada di lingkungan JAX/Torch, prioritaskan triton
      • Untuk menguasai sampai PTX memang perlu waktu lebih lama, tetapi ditekankan pentingnya proses belajar lewat praktik nyata
      • Sangat berempati dengan sakitnya debugging performa CUDA
  • Memperkenalkan materi yang dipakai saat mengajarkan CUDA kepada siswa SMA—tidak cukup untuk menguasai semuanya sendirian, tetapi membantu untuk awal mula

  • Belum pernah mencobanya, tetapi terlihat cukup bagus sehingga ingin merekomendasikan platform leetgpu.com

  • Meminta pandangan praktisi tentang jenis pekerjaan, posisi, dan kelompok perusahaan yang merekrut engineer CUDA

    • Saat ini banyak perusahaan memakai library berbasis CUDA seperti PyTorch, tetapi tidak yakin apakah banyak perusahaan benar-benar membutuhkan pengembangan Native CUDA itu sendiri
    • Berharap bisa menemukan organisasi atau peran yang benar-benar berfokus langsung pada CUDA
      • Dalam kasus tim kami, CUDA dipakai langsung untuk analisis data geospasial
      • Me-rasterisasi tile slippy map lalu memproses ringkasan raster di GPU
      • Karena sebagian besar pemrosesan bersifat independen per piksel, ini cocok untuk GPU
      • Ringkasan diproses paralel per baris lalu digabungkan di akhir
      • Namun saat ini bottleneck ada pada proses penyalinan data ke GPU
  • Menyesuaikan dengan perubahan zaman, memanfaatkan cara bertanya ke LLM seperti Claude agar sekaligus mendapat hasil kode dan penjelasannya

    • Ada pendapat bahwa pada 2025 cara ini masih bisa berhasil, tetapi 2026 akan menuntut satu tingkat lebih jauh lagi