CUDA Academy · Pelajaran

Lakukan Perulangan pada Tahap Ubin

Akumulasikan jumlah parsial di seluruh ubin.

Pelajaran 3 dari 413 langkah

Lakukan Perulangan pada Tahap Ubin adalah pelajaran CUDA Academy gratis di CoddyKit. Ini adalah pelajaran 3 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.

Hasil Kali Titik Terbagi

Satu baris penuh dikalikan satu kolom penuh terlalu besar untuk satu ubin. Jadi, Anda membagi jumlah panjang tersebut menjadi potongan-potongan selebar TILE, satu potongan untuk setiap fase.

Menghitung Fase

Jika matriks memiliki lebar N dan ubin memiliki lebar TILE, Anda memerlukan N / TILE fase untuk mencakup seluruh dimensi dalam.

int numPhases = (N + TILE - 1) / TILE;

Perulangan Fase Luar

Bungkus langkah muat-sinkronisasi-hitung dalam perulangan atas fase. Setiap putaran menggeser jendela ubin lebih jauh sepanjang baris A dan kolom B.

for (int phase = 0; phase < numPhases; ++phase) {
  // load, sync, compute, sync
}

Mengakumulasi Antar-Fase

Variabel lokal sum berada di luar perulangan, sehingga nilainya terus bertambah. Setiap fase menambahkan bagian hasil kali titiknya ke total berjalan.

float sum = 0.0f;
for (int phase = 0; phase < numPhases; ++phase) { ... }

Offset Ubin per Fase

Setiap fase menggeser kolom yang dibaca dari A dan baris yang dibaca dari B sebesar phase * TILE. Begitulah jendela tersebut bergerak maju.

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

Sinkronisasi Setelah Memuat

Sama seperti sebelumnya, panggil __syncthreads() setelah pemuatan agar ubin selesai sebelum ada yang menghitung dengan ubin tersebut.

__syncthreads();

Menghitung Potongan Fase Ini

Perulangan dalam menambahkan TILE hasil perkalian ke sum, dengan hanya menggunakan ubin yang baru dimuat. Perulangan ini menyumbang satu potongan dari hasil kali titik akhir.

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

Penghalang Kedua

Akhiri setiap fase dengan __syncthreads() lainnya agar tidak ada utas yang menimpa ubin saat utas yang lebih lambat masih membacanya. 🚧

__syncthreads(); // before the next phase loads

Mengapa Dua Sinkronisasi Penting

Satu penghalang melindungi pembacaan setelah pemuatan, sedangkan yang lain melindungi pemuatan setelah pembacaan. Bersama-sama, keduanya menjaga setiap utas tetap serempak di seluruh fase.

Menulis Jumlah Akhir

Setelah semua fase selesai, sum yang berjalan merupakan hasil kali titik lengkap. Simpan nilainya ke C sekali, dengan pemeriksaan batas.

if (row < N && col < N)
  C[row*N + col] = sum;

Menangani Ukuran Tidak Rata

Jika N bukan kelipatan TILE yang tepat, muat zero untuk elemen di luar rentang agar hasil perkalian tambahan tidak menambah apa pun ke jumlah.

Pemeriksaan Singkat

Pikirkan di mana total berjalan disimpan selama perulangan fase.

Ringkasan

Anda melakukan perulangan atas fase, menggeser ubin, melakukan sinkronisasi dua kali, dan mengakumulasi jumlah parsial menjadi satu total. Sekarang mari ukur seberapa cepat hasilnya. 📈

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 “Lakukan Perulangan pada Tahap Ubin” gratis?

Ya — teks lengkap “Lakukan Perulangan pada Tahap 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 “Lakukan Perulangan pada Tahap Ubin”?

Akumulasikan jumlah parsial di seluruh ubin. 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 3 dari 4.

Berapa lama pelajaran “Lakukan Perulangan pada Tahap 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