Foto: NVIDIA
Foto: NVIDIA

Fitur Shared Memory Register Spilling Tingkatkan Performa CUDA Kernel

Mohamad Mamduh • 14 September 2025 15:20
Jakarta: NVIDIA memperkenalkan fitur optimasi baru di CUDA Toolkit 13.0 yang disebut shared memory register spilling, sebuah terobosan untuk meningkatkan kinerja kernel CUDA yang mengalami tekanan register tinggi.
 
Dalam pemrograman GPU, setiap kernel memiliki jumlah register terbatas. Ketika kebutuhan register melebihi kapasitas yang tersedia, variabel “tumpah” ke local memory—yang secara fisik berada di global memory—sehingga memperlambat eksekusi karena latensi akses yang lebih tinggi.
 
Sebelum CUDA 13.0, semua register spill dialihkan ke local memory. Meskipun ukuran L1 cache yang lebih besar membantu mengurangi dampak negatifnya, data yang tumpah tetap berpotensi membebani L2 cache dan mengusir data penting lainnya. Hal ini sangat terasa pada bagian kode yang sering dieksekusi atau memiliki tekanan register tinggi, seperti loop besar.

Fitur baru ini memungkinkan spill dialihkan terlebih dahulu ke shared memory yang berada di dalam chip (on-chip), sebelum jatuh ke local memory jika ruang tidak mencukupi. Karena shared memory memiliki latensi jauh lebih rendah, data yang tumpah dapat diakses lebih cepat, mengurangi tekanan pada L2 cache dan meningkatkan efisiensi eksekusi.
 
Pengujian internal menunjukkan peningkatan kinerja yang signifikan. Pada contoh kernel yang diukur menggunakan Nsight Compute, durasi eksekusi berkurang sekitar 7,76%, jumlah siklus yang dibutuhkan turun 7,8%, dan SM active cycles meningkat efisiensinya sebesar 9,03%. Uji coba pada pustaka QUDA—yang digunakan untuk perhitungan lattice QCD—menunjukkan peningkatan kinerja rata-rata 5–10%.
 
Untuk mengaktifkan fitur ini, pengembang perlu menambahkan pragma khusus .pragma "enable_smem_spilling" melalui inline assembly di dalam definisi kernel, tepat setelah deklarasi fungsi. Fitur ini hanya tersedia pada CUDA 13.0 ke atas dan tidak aktif secara bawaan.
 
Meski menjanjikan, ada batasan yang perlu diperhatikan. Fitur ini hanya berlaku dalam lingkup fungsi dan tidak kompatibel dengan mode kompilasi per-fungsi seperti -rdc=true atau mode debug perangkat.
 
Kernel yang menggunakan shared memory dinamis atau melakukan alokasi ulang register secara dinamis juga tidak disarankan menggunakannya. Selain itu, tanpa launch bounds yang jelas, estimasi penggunaan shared memory bisa berlebihan dan justru menurunkan occupancy.
 
Dengan memanfaatkan shared memory register spilling, pengembang dapat mengoptimalkan kernel yang memiliki launch bounds terdefinisi dan shared memory yang tidak terpakai, sehingga meminimalkan hambatan akibat register spill dan memaksimalkan performa GPU.
 
Cek Berita dan Artikel yang lain di
Google News
(MMI)




TERKAIT

BERITA LAINNYA

social
FOLLOW US

Ikuti media sosial medcom.id dan dapatkan berbagai keuntungan