CUDA Academy · Pelajaran

Bagi Hasil Kali Dalam Menjadi Ubin

Muat sububin A dan B pada setiap tahap.

Pelajaran 2 dari 413 langkah

Bagi Hasil Kali Dalam Menjadi Ubin adalah pelajaran CUDA Academy gratis di CoddyKit. Ini adalah pelajaran 2 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.

Gagasan Teknik Ubin

Teknik ubin memecah matriks menjadi ubin persegi kecil yang muat di memori cepat pada chip. Utas bekerja sama untuk memuat sebuah ubin sekali dan menggunakannya kembali berkali-kali.

Mengapa Memori Bersama

Sebuah ubin berada di memori __shared__, yang dapat dilihat oleh setiap utas dalam blok. Membacanya jauh lebih cepat daripada mengakses memori global berulang kali. ⚡

__shared__ float As[TILE][TILE];
__shared__ float Bs[TILE][TILE];

Satu Blok, Satu Ubin Keluaran

Setiap blok bertanggung jawab atas satu bagian keluaran C berukuran TILE kali TILE. Utas-utasnya bekerja sama untuk menghitung seluruh bagian tersebut.

Ukuran Ubin Sesuai dengan Blok

Anda memilih TILE agar sama dengan lebar blok, biasanya 16 atau 32. Dengan begitu, setiap utas memuat tepat satu elemen dari setiap ubin.

#define TILE 16
dim3 threads(TILE, TILE);

Memetakan Utas ke Slot Ubin

Di dalam ubin, slot suatu utas hanyalah threadIdx miliknya. Baris dan kolom globalnya tetap berasal dari indeks blok dan utas.

int ty = threadIdx.y, tx = threadIdx.x;
int row = blockIdx.y*TILE + ty;
int col = blockIdx.x*TILE + tx;

Memuat Ubin A

Setiap utas menyalin satu elemen dari ubin A saat ini ke memori bersama. Bersama-sama, blok tersebut menyiapkan blok A lengkap berukuran TILE kali TILE.

As[ty][tx] = A[row*N + (phase*TILE + tx)];

Memuat Ubin B

Pada saat yang sama, setiap utas memuat satu elemen dari ubin B. Kini kedua ubin berada di chip dan siap dibaca ulang dengan cepat.

Bs[ty][tx] = B[(phase*TILE + ty)*N + col];

Sinkronkan Sebelum Menghitung

Panggil __syncthreads() agar setiap utas selesai memuat sebelum ada yang membaca ubin. Jika langkah ini dilewati, hasilnya akan kacau.

__syncthreads();

Menghitung pada Ubin

Sekarang setiap utas melakukan perulangan singkat atas ubin, dengan hanya membaca memori bersama. Pembacaan ini jauh lebih murah daripada pembacaan dari memori global.

for (int k = 0; k < TILE; ++k)
  sum += As[ty][k] * Bs[k][tx];

Manfaat Penggunaan Ulang

Setiap nilai yang dimuat digunakan oleh TILE utas, bukan hanya satu utas. Penggunaan ulang data inilah alasan utama perkalian matriks berubin dapat berjalan sangat cepat.

Satu Ubin Belum Cukup

Satu ubin hanya mencakup sebagian dari hasil kali titik. Anda mengulangi langkah muat-sinkronisasi-hitung melalui banyak fase, yang akan dibahas dalam pelajaran berikutnya.

Pemeriksaan Singkat

Ingat kembali urutan langkah saat bekerja dengan ubin bersama.

Ringkasan

Anda menyiapkan ubin A dan B ke dalam memori bersama, melakukan sinkronisasi, lalu menghitung dengan pembacaan murah pada chip. Penggunaan ulang adalah keuntungannya. Fase akan dibahas berikutnya. 🧱

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 “Bagi Hasil Kali Dalam Menjadi Ubin” gratis?

Ya — teks lengkap “Bagi Hasil Kali Dalam Menjadi Ubin” 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 “Bagi Hasil Kali Dalam Menjadi Ubin”?

Muat sububin A dan B pada setiap tahap. 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 2 dari 4.

Berapa lama pelajaran “Bagi Hasil Kali Dalam Menjadi Ubin” 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