__shfl_down_sync untuk Reduksi
Lakukan reduksi warp tanpa penghalang.
__shfl_down_sync untuk Reduksi 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.
Shuffle Memindahkan Register
Shuffle memungkinkan satu lane membaca nilai register lane lain secara langsung. Data berpindah antar-utas tanpa memori bersama dan tanpa penghalang di antaranya.
Mengenal shfl_down_sync
Perangkat utama untuk reduksi adalah shfl_down_sync. Setiap lane mengambil nilai dari lane yang posisinya lebih tinggi sejumlah langkah tertentu dalam warp.
float v = __shfl_down_sync(mask, val, offset);Membaca Argumen
Pemanggilan ini menerima masker aktif, nilai yang akan dibagikan, dan offset. Lane i menerima nilai yang dipegang oleh lane i ditambah offset.
Tambahkan Nilai yang Diterima
Penjumlahan warp cukup menambahkan kembali nilai hasil shuffle. Lane i mengambil angka milik tetangganya dan memasukkannya ke dalam total berjalan miliknya.
val += __shfl_down_sync(mask, val, offset);Membagi Dua Offset
Seperti reduksi pohon, offset dimulai dari 16 dan dibagi dua pada setiap langkah: 16, 8, 4, 2, 1. Setelah lima langkah, seluruh warp telah dijumlahkan.
for (int o = 16; o > 0; o >>= 1)
val += __shfl_down_sync(mask, val, o);Mengapa Lima Langkah
Warp memiliki 32 lane, dan 2 pangkat lima adalah 32. Jadi, tepat diperlukan lima langkah pembagian dua untuk menggabungkan seluruh 32 nilai menjadi satu.
Jawaban Berada di Lane 0
Setelah perulangan selesai, total warp lengkap berada di lane 0. Lane lainnya berisi hasil sementara yang tidak bermakna, jadi hanya lane 0 yang boleh menuliskan hasil.
Tidak Perlu Penghalang
Karena pertukaran berlangsung melalui register secara serentak, Anda dapat melewati syncthreads sepenuhnya. Akhiran sync sudah mengoordinasikan lane yang termask.
Lebih Cepat daripada Memori Bersama
Reduksi dengan pengocokan warp mengungguli versi dengan memori bersama: instruksinya lebih sedikit, tidak ada konflik bank, dan tidak ada penundaan akibat barrier. Inilah jalur cepat untuk 32 elemen terakhir.
Berikan Masker yang Tepat
Jika beberapa lane sudah keluar, masker penuh tidak tepat. Ambil himpunan lane yang masih aktif dengan activemask agar setiap pengocokan hanya menyentuh lane yang masih ada.
Reduksi Dua Tingkat
Reduksi besar sering kali mereduksi setiap warp dengan pengocokan, lalu menggabungkan hasil warp di memori bersama. Pengocokan menangani tingkat bagian dalam yang ringan dengan sangat baik.
Pemeriksaan Cepat
Pikirkan lane mana yang menyimpan jawaban ketika perulangan selesai.
Rangkuman
Anda menjumlahkan warp dengan shfl_down_sync: kurangi offset menjadi setengah sebanyak lima kali, dan lane 0 menyimpan totalnya tanpa memerlukan penghalang. Berikutnya: ballot dan voting. ✨
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 “__shfl_down_sync untuk Reduksi” gratis?
Ya — teks lengkap “__shfl_down_sync untuk Reduksi” 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 “__shfl_down_sync untuk Reduksi”?
Lakukan reduksi warp tanpa penghalang. 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 “__shfl_down_sync untuk Reduksi” 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
- Warp, Lajur, dan Masker
- __shfl_down_sync untuk Reduksi
- Fungsi Ballot dan Vote
- Kelompok Kooperatif