Sinkronkan dengan __syncthreads
Gunakan penghalang agar thread tetap selaras.
Sinkronkan dengan __syncthreads 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.
Thread Berjalan Tidak Serempak
Thread dalam sebuah block tidak berjalan secara serempak. Satu thread mungkin selesai menulis ketika thread lain masih memuat data, jadi Anda tidak boleh menganggap data sudah siap.
Mengenal Penghalang
Penghalang adalah titik dalam kode tempat setiap thread harus menunggu hingga semuanya tiba. Baru setelah itu block melanjutkan pekerjaan bersama-sama.
Pemanggilan __syncthreads
CUDA menyediakan __syncthreads() sebagai penghalang untuk seluruh block. Panggil fungsi ini dan setiap thread dalam block akan berhenti hingga thread terakhir tiba. 🛑
__syncthreads();Urutan Muat-Sinkronkan-Gunakan
Pola utamanya sederhana: setiap thread memuat bagiannya ke memori bersama, Anda melakukan sinkronisasi, lalu semua thread membaca dengan aman data yang ditulis oleh thread lain.
tile[threadIdx.x] = input[i];
__syncthreads();
float left = tile[threadIdx.x - 1];Lewati dan Anda Mendapat Data Sampah
Lupakan penghalangnya, dan sebuah thread mungkin membaca slot sebelum thread di sebelahnya menulisnya. Itulah kondisi balapan, yang menghasilkan data salah secara diam-diam.
Ini Juga Merupakan Pagar Memori
Penghalang juga membuat penulisan ke memori bersama menjadi terlihat oleh semua thread setelahnya. Jadi setelah melewati __syncthreads, semua thread melihat nilai yang baru ditulis.
Semua atau Tidak Satu Pun Harus Mencapainya
Aturan ketatnya: setiap thread dalam block harus mencapai __syncthreads yang sama. Jika ada yang melewatinya, block dapat macet selamanya.
Jebakan Percabangan Berbeda
Jangan pernah menempatkan penghalang di dalam if yang hanya dimasuki sebagian thread. Thread yang mengambil jalur lain tidak pernah tiba, sehingga block mengalami kebuntuan. ⚠️
if (threadIdx.x < 64) {
__syncthreads();
}Cakupan Block, Bukan Cakupan Grid
Satu batasan penting: __syncthreads hanya menyinkronkan satu block. Fungsi ini tidak dapat mengoordinasikan thread di berbagai block dalam grid.
Sinkronisasi di Dalam Perulangan
Dalam algoritme bertile, Anda sering melakukan sinkronisasi dua kali per tahap: sekali setelah memuat tile dan sekali setelah menghitung, sebelum memuat tile berikutnya.
Murah, tetapi Tidak Gratis
Penghalang memerlukan sedikit waktu ketika thread menunggu. Gunakan saat diperlukan demi ketepatan, tetapi hindari pemanggilan tambahan yang hanya menghentikan thread yang lebih cepat.
Pemeriksaan Singkat
Mari uji pemahaman Anda tentang penghalang.
Ringkasan
Anda telah mempelajari bahwa __syncthreads() adalah penghalang untuk seluruh block yang menjaga thread tetap selaras, dan bahwa menempatkannya di dalam percabangan yang berbeda dapat menyebabkan kebuntuan. Berikutnya: konflik bank. 🎯
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 “Sinkronkan dengan __syncthreads” gratis?
Ya — teks lengkap “Sinkronkan dengan __syncthreads” 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 “Sinkronkan dengan __syncthreads”?
Gunakan penghalang agar thread tetap selaras. 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 “Sinkronkan dengan __syncthreads” 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
- Deklarasikan Larik __shared__
- Sinkronkan dengan __syncthreads
- Hindari Konflik Bank
- Memori Bersama Dinamis