CUDA Academy · Pelajaran

Pengalamatan Sekuensial

Gunakan stride bebas konflik dalam memori bersama.

Pelajaran 3 dari 413 langkah

Pengalamatan Sekuensial 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 lajur warp. Ketika 32 thread mengakses 32 bank yang berbeda, semua pembacaan berlangsung dalam satu siklus cepat.

Konflik Bank Memperlambat Eksekusi

Jika dua thread dalam satu warp mengakses bank yang sama, itu disebut konflik bank. Perangkat keras membuat akses tersebut berlangsung secara berurutan, sehingga memerlukan siklus tambahan.

Pengalamatan Berselang

Reduksi sebelumnya menggunakan pengalamatan berselang: langkah dimulai dari nilai kecil lalu berlipat ganda, sehingga pasangan data berdekatan di memori bersama.

int index = 2 * s * tid;
data[index] += data[index + s];

Mengapa Penyelaan Menyebabkan Konflik

Dengan langkah kecil yang terus berlipat ganda, beberapa lajur dalam satu warp dipetakan ke bank yang sama. Akses tersebut tidak lagi dapat berlangsung dalam satu siklus.

Balik Urutan Langkah

Pengalamatan berurutan memulai langkah dari nilai besar lalu membaginya menjadi dua pada setiap tahap, kebalikan dari penyelaan. Perubahan tunggal ini menghilangkan konflik.

for (int s = blockDim.x / 2; s > 0; s >>= 1) {
  if (tid < s)
    data[tid] += data[tid + s];
  __syncthreads();
}

Langkah Besar, Bank Tanpa Konflik

Langkah besar menyebarkan alamat pasangan berjauhan, sehingga setiap lajur jatuh pada banknya sendiri. Warp membaca tanpa konflik dalam satu siklus.

Penjaga tid < s

Hanya separuh thread bagian bawah yang bekerja pada setiap tahap, ditulis sebagai tid < s. Hal ini menjaga thread aktif tetap berurutan, sehingga warp juga tetap tidak mengalami divergensi.

Dua Keuntungan Sekaligus

Pengalamatan berurutan memperbaiki konflik bank dan menghindari divergensi warp dalam kernel yang sama. Satu perubahan tata letak menyelesaikan dua masalah kinerja.

Tetap Lakukan Sinkronisasi Setiap Tahap

Anda tetap memerlukan __syncthreads setelah setiap tahap. Thread harus melihat penulisan dari tingkat sebelumnya sebelum membaca untuk tingkat berikutnya.

Hasil Berada di Indeks 0

Saat langkah dibagi dua hingga mendekati nol, semua jumlah parsial digabungkan ke dalam data[0]. Thread 0 kemudian menulis hasil blok tersebut kembali ke memori global.

Optimisasi Klasik

Pola ini berasal langsung dari panduan reduksi terkenal milik NVIDIA. Pengalamatan berurutan merupakan langkah penting dalam buku teks menuju kernel tanpa konflik.

Pemeriksaan Cepat

Pikirkan mengapa langkah besar yang dibagi dua lebih baik daripada langkah kecil yang dilipatgandakan.

Rangkuman

Anda mengganti pengalamatan berselang dengan pengalamatan berurutan: langkah dimulai dari nilai besar lalu dibagi dua, sehingga konflik bank dan divergensi hilang sekaligus. Berikutnya: penjumlahan banyak blok. ✨

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 “Pengalamatan Sekuensial” gratis?

Ya — teks lengkap “Pengalamatan Sekuensial” 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 “Pengalamatan Sekuensial”?

Gunakan stride bebas konflik dalam memori 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 “Pengalamatan Sekuensial” 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. Gagasan Pohon Reduksi
  2. Hilangkan Divergensi Warp
  3. Pengalamatan Sekuensial
  4. Reduksi Akhir Multi-Blok
← Kembali ke CUDA Academy