GPU: CUDA
Penjelasan Detail tentang CUDA
CUDA (Compute Unified Device Architecture) adalah platform komputasi paralel dan model pemrograman yang dikembangkan oleh NVIDIA. CUDA memungkinkan pengembang untuk memanfaatkan GPU NVIDIA untuk komputasi umum (general-purpose computing), bukan hanya untuk rendering grafis. Ini mempercepat aplikasi yang intensif komputasi, seperti machine learning, simulasi ilmiah, pemrosesan gambar, dan high-performance computing (HPC), dengan memindahkan beban kerja dari CPU ke GPU. CUDA mendukung bahasa pemrograman seperti C, C++, dan Fortran, serta menyediakan API, tools, dan antarmuka untuk mengelola sumber daya GPU, menjalankan kernel (fungsi paralel), dan menangani transfer data. Sejak diluncurkan pada 2006, CUDA telah menjadi standar industri, terutama di bidang AI dan deep learning, dengan versi terbaru CUDA Toolkit 13.0.1 yang dirilis pada September 2025.
Arsitektur CUDA
Arsitektur CUDA terdiri dari komponen hardware dan software yang dirancang untuk komputasi paralel, memanfaatkan kemampuan GPU dalam menangani ribuan thread secara simultan.
- Komponen Hardware:
- Desain GPU: GPU NVIDIA mengalokasikan lebih banyak transistor untuk pemrosesan data (seperti operasi floating-point) daripada caching atau kontrol alur, sehingga lebih efisien untuk tugas paralel. Ini menyembunyikan latensi memori dengan komputasi, memungkinkan throughput tinggi untuk ribuan thread.
- Streaming Multiprocessors (SMs): Array dari SM yang menjadwalkan dan menjalankan blok thread. Arsitektur ini skalabel di berbagai model GPU (misalnya, GeForce untuk konsumen, Tesla untuk HPC).
- Compute Capability: Versi seperti 9.0 (untuk arsitektur Hopper) yang menentukan fitur yang didukung, termasuk instruksi khusus dan kemampuan hardware. Versi mayor menandai arsitektur inti, sementara minor adalah peningkatan inkremental.
- SIMT (Single Instruction Multiple Threads) Architecture: Menjalankan thread dalam grup 32 (disebut warp) dengan instruksi tunggal. Efisiensi maksimal dicapai saat semua thread dalam warp setuju pada jalur eksekusi.
- Hardware Multithreading: Menjaga konteks eksekusi (program counter, register) on-chip untuk setiap warp, dengan context switching tanpa biaya. Jumlah blok/warp yang residen tergantung penggunaan register dan shared memory.
- Hierarki Memori: Termasuk register (cepat, per-thread), shared memory (per-blok, rendah latensi), local memory (untuk overflow register), global memory (besar tapi lambat), constant memory (read-only, cached), dan texture memory (optimized untuk akses spasial). Setiap jenis memori memiliki latensi dan bandwidth berbeda, dioptimalkan untuk pola akses tertentu.
- CUDA Arrays: Struktur memori opaque untuk fetching texture, mendukung array 1D, 2D, atau 3D dengan 1-4 komponen (8-, 16-, atau 32-bit integer/float).
- Sistem Multi-Device: Mendukung multiple GPU, masing-masing dengan memori sendiri, dengan akses peer-to-peer di compute capability 2.0+.
- Komponen Software:
- nvcc Compiler: Memproses file sumber CUDA, memisahkan kode host (CPU) dan device (GPU), mengompilasi kode device ke PTX (assembly) atau cubin (binary), dan mengintegrasikan panggilan runtime untuk peluncuran kernel.
- CUDA Runtime Library (cudart): Fungsi C/C++ untuk manajemen memori device, transfer data, dan sistem multi-device. Dibangun di atas CUDA Driver API untuk kontrol lebih rendah.
- CUDA Driver API: Antarmuka low-level, kompatibel mundur tapi tidak maju, hanya satu versi yang terinstal sekaligus.
- CUDA Runtime API: Antarmuka high-level untuk manajemen device, memori, dan kernel; mendukung multiple versi dalam proses yang sama jika linked secara statis.
- Just-in-Time Compilation: Mengompilasi PTX ke binary saat runtime, dengan caching untuk invokasi selanjutnya.
- CUDA Toolkit: Termasuk compiler, library (seperti cuBLAS untuk linear algebra, cuDNN untuk deep learning), dan tools debugging.
- Streams dan Events: Untuk mengelola operasi konkuren (misalnya, cudaStreamCreate untuk stream, cudaStreamSynchronize untuk sinkronisasi).
- NVIDIA System Management Interface (nvidia-smi): Tool untuk konfigurasi mode komputasi (Default, Exclusive-Process, Prohibited) dan manajemen GPU Tesla.
Model Pemrograman
CUDA memperluas C/C++ dengan model pemrograman paralel, membedakan host (CPU) dan device (GPU) dengan ruang memori terpisah.
- Hierarki Thread: Thread diorganisir menjadi blok (hingga 1024 thread per blok), blok menjadi grid. Dimensi blok/grid bisa 1D, 2D, atau 3D untuk mapping ke masalah (misalnya, gambar 2D).
- Kernel Execution: Fungsi kernel diluncurkan dari host dengan sintaks `kernel<<<gridDim, blockDim>>>(args)`, di mana thread di GPU menjalankan kernel secara paralel.
- Manajemen Memori: Alokasi memori device dengan cudaMalloc, transfer data dengan cudaMemcpy (host-to-device atau sebaliknya).
- Sinkronisasi: Thread dalam blok bisa sinkron dengan __syncthreads(); warp-level primitives untuk sinkronisasi lebih halus.
- Abstraksi: Model ini menyembunyikan detail hardware, memungkinkan skalabilitas di berbagai GPU tanpa modifikasi kode.
Fitur Kunci
- Paralelisme Massif: Mendukung ribuan thread untuk komputasi intensif.
- Optimasi Memori: Hierarki memori yang fleksibel untuk mengurangi latensi.
- Library Ekosistem: Integrasi dengan library seperti cuDNN (deep neural networks), cuBLAS (BLAS routines), dan Thrust (STL-like untuk GPU).
- Debugging dan Profiling: Tools seperti Nsight untuk analisis performa.
- Portabilitas: Kode CUDA bisa dijalankan di GPU dengan compute capability yang sesuai, dengan JIT compilation untuk adaptasi runtime.
- Multi-GPU Support: Untuk skalabilitas di sistem besar, seperti superkomputer.
Bagaimana CUDA Memungkinkan Komputasi GPU
CUDA mengubah GPU dari perangkat grafis menjadi akselerator komputasi umum dengan menyediakan abstraksi pemrograman yang mudah. Host mengatur setup (alokasi memori, transfer data), lalu meluncurkan kernel di GPU untuk eksekusi paralel. Hasil dikembalikan ke host. Ini memanfaatkan arsitektur GPU yang paralel, mencapai speedup hingga ratusan kali lipat dibanding CPU untuk tugas seperti matrix multiplication atau simulasi fisika.
Cara Instalasi CUDA di Ubuntu 24.04
Instalasi CUDA di Ubuntu 24.04 direkomendasikan menggunakan metode package manager (DEB packages), khususnya network repository untuk kemudahan update. Versi terbaru adalah CUDA Toolkit 13.0.1. Pastikan sistem Anda memiliki GPU NVIDIA yang kompatibel dengan CUDA (cek di https://developer.nvidia.com/cuda-gpus). Proses ini memerlukan hak administratif (gunakan sudo).
Prerequisites
- Hardware: GPU NVIDIA yang mendukung CUDA. Cek dengan perintah: `lspci | grep -i nvidia`.
- Software: Ubuntu 24.04 LTS (versi kernel 6.8.0-55, GCC 13.3.0, GLIBC 2.39). Instal GCC jika belum: `sudo apt install gcc`. Pastikan tidak ada instalasi CUDA sebelumnya yang konflik (uninstall jika perlu dengan
sudo apt --purge remove <package_name>
- Unduh toolkit dari https://developer.nvidia.com/cuda-downloads, pilih Ubuntu 24.04 dan arsitektur (biasanya x86_64).
Langkah Instalasi (Metode Network Repository - Direkomendasikan)
1. Instal CUDA Keyring:
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-keyring_1.1-1_all.deb sudo dpkg -i cuda-keyring_1.1-1_all.deb
2. Update Repository Cache:
sudo apt update
3. Instal CUDA Toolkit:
sudo apt install cuda-toolkit
(Opsional: Instal NVIDIA GDS untuk storage acceleration: `sudo apt install nvidia-gds`. Untuk arm64-jetson: `sudo apt install cuda-compat`.)
4. Reboot Sistem:
sudo reboot
Post-Instalasi
- Setup Environment Variables (Tambahkan ke ~/.bashrc atau /etc/profile):
export PATH=${PATH}:/usr/local/cuda-13.0/bin export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/cuda-13.0/lib64 # Untuk sistem 64-bit
Jalankan `source ~/.bashrc` untuk apply.
- Instal Library Tambahan (Opsional, untuk CUDA Samples):
sudo apt-get install g++ freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libglu1-mesa-dev libfreeimage-dev libglfw3-dev
- Verifikasi Instalasi
- Cek versi NVCC:
nvcc --version (harus menampilkan CUDA 13.0.1).
- Kompilasi dan jalankan sample: Navigasi ke `/usr/local/cuda-13.0/samples`, jalankan `make`, lalu eksekusi binary (misalnya, `./deviceQuery` untuk info GPU).
- Gunakan `nvidia-smi` untuk cek status GPU.
Jika ada masalah, cek log atau dokumentasi resmi. Untuk metode lain seperti local repo atau runfile, lihat guide lengkap.