CUDA Academy · Pelajaran

Sinkronkan dengan __syncthreads

Gunakan penghalang agar thread tetap selaras.

Pelajaran 2 dari 413 langkah

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. 🎯

Gratis untuk memulai

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

  1. Deklarasikan Larik __shared__
  2. Sinkronkan dengan __syncthreads
  3. Hindari Konflik Bank
  4. Memori Bersama Dinamis
← Kembali ke CUDA Academy