CUDA Academy · Pelajaran

Kernel Matmul Naif

Dasar berindeks 2D beserta keterbatasannya.

Pelajaran 1 dari 413 langkah

Kernel Matmul Naif adalah pelajaran CUDA Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar CUDA Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus CUDA Academy mencakup 4 pelajaran total.

Perkalian Matriks dengan Gaya GPU

Perkalian matriks adalah inti grafika dan AI. Hari ini Anda terlebih dahulu membuat versi GPU yang sederhana, lalu mempelajari mengapa versi tersebut tidak memanfaatkan seluruh potensi kecepatan.

Matematika dalam Satu Baris

Setiap sel keluaran C[row][col] adalah hasil kali titik: kalikan seluruh baris A dengan seluruh kolom B, lalu jumlahkan hasilnya. 🧮

C[row][col] = sum over k of A[row][k] * B[k][col]

Satu Thread per Keluaran

Rencana paling sederhana memberikan setiap thread satu elemen keluaran C. Ribuan sel dihitung secara bersamaan di seluruh GPU.

Grid Thread 2D

Karena C adalah kisi 2D, Anda meluncurkan utas dalam dua dimensi. Indeks x memetakan kolom, sedangkan indeks y memetakan baris.

dim3 threads(16, 16);
dim3 blocks((N+15)/16, (N+15)/16);

Menemukan Sel Utas Ini

Di dalam kernel, setiap utas menghitung baris dan kolomnya sendiri dari indeks blok dan utasnya, seperti pengindeksan 1D tetapi pada kedua sumbu.

int row = blockIdx.y*blockDim.y + threadIdx.y;
int col = blockIdx.x*blockDim.x + threadIdx.x;

Pemeriksaan Batas

Kisi dibulatkan ke atas, sehingga beberapa utas berada di luar matriks. Gunakan penjagaan if (row < N && col < N) sebelum mengakses memori.

if (row < N && col < N) {
  // safe to compute
}

Perulangan Dalam

Setiap utas menjalankan perulangan atas k, lalu menjumlahkan hasil perkalian ke dalam jumlah lokal. Variabel lokal tersebut berada di register cepat.

float sum = 0.0f;
for (int k = 0; k < N; ++k)
  sum += A[row*N+k] * B[k*N+col];

Menulis Hasil

Setelah perulangan selesai, utas menyimpan jumlah yang telah dikumpulkannya ke dalam C tepat satu kali. Satu utas, satu penulisan yang rapi.

C[row*N + col] = sum;

Perataan Urutan Baris

Matriks adalah array 1D datar, jadi Anda mengindeksnya sebagai row*N + col. Memahami tata letak ini dengan benar adalah setengah dari tantangan dalam perkalian matriks.

Mengapa Berhasil, tetapi Lambat

Kernel ini benar dan mudah dibaca, tetapi setiap utas membaca baris dan kolomnya langsung dari memori global, ruang yang paling lambat.

Biaya Tersembunyi

Utas-utas yang bersebelahan membaca ulang baris A dan kolom B yang sama berulang kali. Lalu lintas memori yang terbuang inilah yang akan diperbaiki oleh teknik ubin.

Pemeriksaan Singkat

Pikirkan bagaimana kernel naif memetakan pekerjaan ke utas.

Ringkasan

Anda memetakan satu utas ke satu sel keluaran, melakukan perulangan atas k dari memori global, dan melihat pembacaan yang berulang. Selanjutnya, Anda mengurangi lalu lintas tersebut dengan teknik ubin. 🚀

Gratis untuk memulai

Belajar C++ dengan tutor AI — gratis

Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.

Kursus
30
Pelajaran
120

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Kernel Matmul Naif” gratis?

Ya — teks lengkap “Kernel Matmul Naif” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus CUDA Academy, upgrade ke CoddyKit PRO. Kursus CUDA Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Kernel Matmul Naif”?

Dasar berindeks 2D beserta keterbatasannya. Kamu berlatih CUDA Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai CUDA Academy?

Tidak diperlukan pengalaman sebelumnya. CUDA Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.

Berapa lama pelajaran “Kernel Matmul Naif” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran CUDA Academy ini?

Ya. Setiap pelajaran CUDA Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Kernel Matmul Naif
  2. Bagi Hasil Kali Dalam Menjadi Ubin
  3. Lakukan Perulangan pada Tahap Ubin
  4. Ukur Percepatannya
← Kembali ke CUDA Academy