0Pricing
CUDA Academy · Pelajaran

Hindari Konflik Bank

Mengapa padding dapat mempercepat akses bersama.

Hindari Konflik Bank 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.

Memori Bersama Memiliki Bank

Memori bersama terbagi menjadi 32 bank, satu untuk setiap thread dalam warp. Menyebarkan akses ke berbagai bank memungkinkan semua 32 thread membaca dengan kecepatan penuh.

Cara Alamat Dipetakan

Kata berurutan berukuran 4 byte ditempatkan pada bank yang berurutan, lalu berulang kembali setelah 32. Jadi kata 0 berada di bank 0, dan kata 32 kembali berada di bank 0.

Apa Itu Konflik Bank

Konflik bank terjadi ketika dua thread dalam warp mengakses bank yang sama tetapi kata yang berbeda. Perangkat keras harus membuat akses tersebut berjalan secara berurutan.

Serialisasi Mengurangi Kecepatan

Konflik N-arah mengubah satu akses cepat menjadi N akses lambat. Konflik 32-arah dapat membuat memori bersama sama lambatnya seperti jika semua akses dilakukan dalam satu antrean. 🐢

Kasus Ideal: Langkah Satu

Ketika setiap thread membaca tile[threadIdx.x], setiap thread mengakses bank yang berbeda. Akses ini bebas konflik dan berjalan dengan lebar pita penuh.

float v = tile[threadIdx.x];

Jebakan: Langkah 32

Pembacaan dengan langkah 32 mengarahkan setiap thread ke bank yang sama. Ini adalah kasus terburuk, yaitu konflik 32-arah penuh.

float v = tile[threadIdx.x * 32];

Langkah Genap Juga Merugikan

Stride genap apa pun yang memiliki faktor persekutuan dengan 32 akan menyebabkan konflik parsial. Misalnya, stride 2 menimbulkan konflik 2-arah di seluruh warp.

Pengecualian Siaran

Kabar baiknya, jika semua thread membaca alamat yang sama, perangkat keras menyiarkannya sekaligus. Membaca kata yang sama tidak masalah; konflik hanya terjadi jika bank-nya sama tetapi kata yang dibaca berbeda.

Padding sebagai Solusi

Untuk tile 2D, tambahkan satu kolom ekstra dengan padding +1. Ini menggeser setiap baris sehingga akses kolom tidak lagi semuanya berada di satu bank.

__shared__ float tile[32][33];

Mengapa +1 Berhasil

Kolom ekstra membuat panjang baris saling prima dengan 32. Kini, menelusuri sebuah kolom ke bawah akan mengunjungi bank yang berbeda setiap kali, sehingga konflik hilang.

Buat Profil, Jangan Menebak

Konflik bank tidak terlihat dalam kode sumber. Gunakan Nsight Compute untuk mengukur konflik memori bersama sebelum meluangkan waktu untuk memperbaikinya.

Pemeriksaan Singkat

Mari kita periksa hal-hal yang membuat akses bersama berlangsung cepat.

Rangkuman

Anda telah mempelajari bahwa memori bersama memiliki 32 bank, akses ke bank yang sama dengan kata berbeda akan diserialkan, dan padding +1 memperbaiki konflik kolom. Berikutnya: memori bersama dinamis. 🎯

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Hindari Konflik Bank” gratis?

Ya — teks lengkap “Hindari Konflik Bank” 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 “Hindari Konflik Bank”?

Mengapa padding dapat mempercepat akses bersama. 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 “Hindari Konflik Bank” 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. Deklarasikan Larik __shared__
  2. Sinkronkan dengan __syncthreads
  3. Hindari Konflik Bank
  4. Memori Bersama Dinamis
← Kembali ke CUDA Academy