Pengalamatan Sekuensial
Gunakan stride bebas konflik dalam memori bersama.
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. ✨
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
- Gagasan Pohon Reduksi
- Hilangkan Divergensi Warp
- Pengalamatan Sekuensial
- Reduksi Akhir Multi-Blok