CUDA Academy · Pelajaran

__shfl_down_sync untuk Pengurangan

Lakukan pengurangan warp tanpa halangan.

Pelajaran 2 daripada 413 langkah

__shfl_down_sync untuk Pengurangan ialah pelajaran CUDA Academy percuma di CoddyKit. Ini ialah pelajaran 2 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran CUDA Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus CUDA Academy merangkumi sejumlah 4 pelajaran.

Shuffle Mengalihkan Daftar

Shuffle membolehkan satu lorong membaca nilai daftar lorong lain secara terus. Data berpindah antara utas tanpa memori dikongsi dan tanpa penghalang di antaranya.

Kenali shfl_down_sync

Alat utama untuk pengurangan ialah shfl_down_sync. Setiap lorong mengambil nilai daripada lorong yang berada beberapa kedudukan lebih tinggi dalam warp.

float v = __shfl_down_sync(mask, val, offset);

Membaca Argumen

Panggilan ini menerima topeng aktif, nilai untuk dikongsi dan ofset. Lorong i menerima nilai yang dipegang oleh lorong i tambah ofset.

Tambah Nilai yang Diterima

Jumlah warp hanya menambah nilai yang di-shuffle kembali. Lorong i mengambil nombor jirannya dan memasukkannya ke dalam jumlah terkumpul sendiri.

val += __shfl_down_sync(mask, val, offset);

Bahagikan Dua Ofset

Seperti pengurangan pepohon, ofset bermula pada 16 dan dibahagi dua pada setiap langkah: 16, 8, 4, 2, 1. Selepas lima langkah, seluruh warp dijumlahkan.

for (int o = 16; o > 0; o >>= 1)
  val += __shfl_down_sync(mask, val, o);

Mengapa Lima Langkah

Warp mempunyai 32 lorong, dan 2 kuasa lima ialah 32. Oleh itu, lima langkah pembahagian dua tepat mencukupi untuk menggabungkan kesemua 32 nilai menjadi satu.

Jawapan Berada di Lorong 0

Selepas gelung, jumlah lengkap warp berada dalam lane 0. Lorong lain mengandungi data separa yang tidak berguna, jadi hanya lorong 0 patut menulis hasil tersebut.

Tiada Halangan Diperlukan

Oleh sebab pertukaran berlaku melalui daftar secara serentak, anda boleh melangkau syncthreads sepenuhnya. Akhiran sync sudah menyelaraskan lorong yang bertopeng.

Lebih Pantas daripada Memori Dikongsi

Pengurangan melalui shuffle warp mengatasi versi memori dikongsi: arahan lebih sedikit, tiada konflik bank dan tiada kelewatan akibat halangan. Ini ialah laluan pantas untuk 32 elemen terakhir.

Hantar Topeng yang Betul

Jika sesetengah lorong sudah keluar, topeng penuh adalah salah. Dapatkan set yang masih aktif dengan activemask supaya setiap shuffle hanya menyentuh lorong yang masih ada.

Pengurangan Dua Tahap

Pengurangan besar sering mengurangkan setiap warp dengan shuffle, kemudian menggabungkan hasil warp dalam shared memory. Shuffle mengendalikan tahap dalaman yang murah dengan sangat baik.

Semakan Pantas

Fikirkan lorong mana yang memegang jawapan apabila gelung selesai.

Imbas Kembali

Anda menjumlahkan warp dengan shfl_down_sync: bahagikan ofset kepada separuh sebanyak lima kali, dan lorong 0 memegang jumlah keseluruhan tanpa memerlukan halangan. Seterusnya: ballot dan undian. ✨

Percuma untuk bermula

Pelajari C++ dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
30
Pelajaran
120

Soalan Lazim

Adakah pelajaran “__shfl_down_sync untuk Pengurangan” percuma?

Ya — teks penuh “__shfl_down_sync untuk Pengurangan” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus CUDA Academy, tingkat taraf kepada CoddyKit PRO. Kursus CUDA Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “__shfl_down_sync untuk Pengurangan”?

Lakukan pengurangan warp tanpa halangan. Anda berlatih CUDA Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan CUDA Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran CUDA Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 2 daripada 4.

Berapa lamakah pelajaran “__shfl_down_sync untuk Pengurangan” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran CUDA Academy ini?

Ya. Setiap pelajaran CUDA Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Warp, Lorong dan Topeng
  2. __shfl_down_sync untuk Pengurangan
  3. Fungsi Undi dan Ballot
  4. Kumpulan Kerjasama
← Kembali ke CUDA Academy