CUDA Academy · Pelajaran

Menangkap Kesalahan Sinkronisasi dengan synccheck

__syncthreads yang divergen dan kondisi berbahaya

Pelajaran 4 dari 413 langkah

Menangkap Kesalahan Sinkronisasi dengan synccheck adalah pelajaran CUDA Academy gratis di CoddyKit. Ini adalah pelajaran 4 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.

Kontrak Penghalang

Penghalang __syncthreads hanya berfungsi jika setiap thread dalam blok mencapainya. Jika beberapa thread melewatinya, perilakunya menjadi tidak terdefinisi. ⚠️

Penghalang yang Menyimpang

Memanggil penghalang di dalam percabangan yang dilewati sebagian thread merupakan sinkronisasi yang menyimpang, yaitu bahaya yang dirancang untuk ditangkap oleh alat synccheck.

Berkenalan dengan synccheck

Jalankan alat synccheck dari compute-sanitizer untuk mendeteksi penggunaan __syncthreads dan penghalang terkait yang ilegal atau menyimpang.

compute-sanitizer --tool synccheck ./tile

Sinkronisasi Kondisional yang Bermasalah

Di sini hanya sebagian thread yang memanggil penghalang, sementara thread lainnya tertinggal. synccheck menandainya sebagai __syncthreads yang menyimpang.

if (tid < half) {
    __syncthreads();
}

Pola yang Benar

Keluarkan penghalang dari percabangan agar semua thread mencapainya bersama-sama, sementara hanya pekerjaan yang dijaga tetap bersyarat.

if (tid < half) {
    sum += tile[tid];
}
__syncthreads();

Penghalang dalam Perulangan

Setiap thread harus menjalankan jumlah penghalang yang sama, sehingga perulangan dengan jumlah iterasi yang bergantung pada thread dan sinkronisasi di dalamnya merupakan jebakan.

Pengembalian Awal Berisiko

Thread yang mencapai return awal sebelum penghalang tidak pernah tiba di sana, sehingga synccheck melaporkan thread lainnya terjebak saat menunggu.

Membaca Laporan

synccheck menyebutkan penghalang dan thread yang menyimpang, sehingga Anda dapat melacak percabangan atau return yang melanggar kontrak.

Sinkronisasi Tingkat Warp Juga

synccheck juga memeriksa mask __syncwarp, dengan menandai ketika sebuah thread berpartisipasi menggunakan mask yang tidak sesuai dengan lajurnya.

Tambahkan Informasi Baris

Kompilasi dengan -lineinfo agar synccheck dapat menunjuk pemanggilan penghalang yang tepat, bukan sekadar menyebutkan kernel.

nvcc -lineinfo tile.cu -o tile

Satu Alat per Proses

Jalankan synccheck dalam prosesnya sendiri, terpisah dari memcheck dan racecheck, karena setiap alat sanitasi menargetkan kelas bug yang berbeda.

Pemeriksaan Singkat

Masalah apa yang secara khusus dideteksi oleh alat synccheck?

Rangkuman

Anda telah mempelajari kontrak penghalang, menjalankan synccheck, dan memperbaiki sinkronisasi yang menyimpang dengan memindahkan penghalang keluar dari percabangan. Blok Anda tetap selaras. 🙌

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 “Menangkap Kesalahan Sinkronisasi dengan synccheck” gratis?

Ya — teks lengkap “Menangkap Kesalahan Sinkronisasi dengan synccheck” 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 “Menangkap Kesalahan Sinkronisasi dengan synccheck”?

__syncthreads yang divergen dan kondisi berbahaya 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 4 dari 4.

Berapa lama pelajaran “Menangkap Kesalahan Sinkronisasi dengan synccheck” 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. Menelusuri Kernel Langkah demi Langkah di cuda-gdb
  2. Menemukan Kebocoran dengan memcheck
  3. Memburu Perlombaan dengan racecheck
  4. Menangkap Kesalahan Sinkronisasi dengan synccheck
← Kembali ke CUDA Academy