Fungsi Ballot dan Vote
Polling predikat di seluruh warp.
Fungsi Ballot dan Vote 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.
Lane Dapat Memberikan Suara
Selain memindahkan data, warp dapat menjawab pertanyaan ya atau tidak secara bersama-sama. Intrinsik Vote memungkinkan setiap lane membagikan predikat benar atau salah dalam satu langkah yang ringan.
Mengenal ballot_sync
Voting yang paling fleksibel adalah ballot_sync. Fungsi ini mengembalikan bilangan 32-bit yang bit ke-i-nya bernilai 1 tepat ketika predikat lane ke-i bernilai benar.
unsigned bits = __ballot_sync(mask, pred);Satu Bit per Lane
Bilangan bulat yang dikembalikan itu adalah bitmap kecil dari warp. Membaca bit ke-i memberi tahu apakah lane ke-i memilih benar, semuanya dikemas dalam satu register.
Hitung Nilai Benar
Ingin tahu berapa banyak lane yang menjawab ya? Hitung bit yang aktif pada hasil ballot. popc menghitung bit yang bernilai 1 dan langsung memberikan jumlah suara benar dalam warp.
int yes = __popc(__ballot_sync(mask, pred));Semua atau Salah Satu
Dua pintasan menjawab pertanyaan umum. all_sync mengembalikan true hanya jika semua lane sepakat, sedangkan any_sync mengembalikan true jika setidaknya satu lane sepakat.
bool every = __all_sync(mask, pred);Any Berarti Setidaknya Satu
Gunakan any_sync untuk keluar lebih awal: jika salah satu lane menemukan kecocokan, seluruh warp dapat bereaksi bersama-sama tanpa memeriksa lane satu per satu.
bool found = __any_sync(mask, pred);Pemadatan Aliran
Ballot memungkinkan compaction: setiap lane menentukan apakah akan mempertahankan elemennya, memberikan suara, lalu bitmap memberi tahu lane tempat menulis ke larik keluaran yang dipadatkan.
Menemukan Slot Saya
Untuk menempatkan nilainya, sebuah lane menghitung bit benar yang berada di bawah posisinya. prefix count dari ballot tersebut menjadi indeksnya dalam hasil yang dipadatkan.
int slot = __popc(bits & ((1u << lane) - 1));Pilih Lane Pemimpin
Terkadang satu lane harus mengerjakan tugas bersama. Bit terendah yang aktif dalam ballot, yang ditemukan dengan ffs, merupakan pemimpin alami yang dapat disepakati seluruh warp.
Selalu Berikan Masker
Seperti pengocokan, intrinsik voting menerima mask aktif. Lane yang tidak aktif menyumbang bit 0, jadi berikan himpunan yang tepat agar lane yang tidak ada tidak ikut dihitung.
Koordinasi Ringan
Voting hanya memerlukan satu instruksi dan tidak menyentuh memori. Voting memungkinkan warp coordinate keputusan dengan biaya yang jauh lebih rendah daripada atomik atau penanda memori bersama.
Pemeriksaan Cepat
Ingat kembali apa yang dikembalikan ballot_sync kepada setiap lane.
Rangkuman
Anda melakukan polling pada warp dengan ballot dan voting: menghitung nilai benar, memeriksa apakah semua atau salah satu benar, serta memadatkan aliran dengan biaya rendah. Berikutnya: cooperative groups untuk sinkronisasi yang fleksibel. ✨
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 “Fungsi Ballot dan Vote” gratis?
Ya — teks lengkap “Fungsi Ballot dan Vote” 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 “Fungsi Ballot dan Vote”?
Polling predikat di seluruh warp. 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 “Fungsi Ballot dan Vote” 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