CUDA Academy · Pelajaran

Mengesan Ralat Penyegerakan dengan synccheck

__syncthreads yang bercapah dan bahaya penyegerakan

Pelajaran 4 daripada 413 langkah

Mengesan Ralat Penyegerakan dengan synccheck ialah pelajaran CUDA Academy percuma di CoddyKit. Ini ialah pelajaran 4 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.

Kontrak Penghalang

Penghalang __syncthreads hanya berfungsi jika setiap utas dalam blok mencapainya. Jika sesetengah utas melangkaunya, tingkah laku menjadi tidak ditakrifkan. ⚠️

Penghalang Bercapah

Memanggil penghalang dalam cabang yang dilangkau oleh sesetengah utas ialah penyegerakan bercapah, iaitu bahaya yang direka untuk dikesan oleh alat synccheck.

Kenali synccheck

Jalankan alat synccheck dalam compute-sanitizer untuk mengesan penggunaan __syncthreads dan penghalang berkaitan yang tidak sah atau bercapah.

compute-sanitizer --tool synccheck ./tile

Penyegerakan Bersyarat yang Bermasalah

Di sini hanya sesetengah utas memanggil penghalang, menyebabkan utas yang lain tertinggal. synccheck menandainya sebagai __syncthreads bercapah.

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

Pola yang Betul

Keluarkan penghalang daripada cabang supaya semua utas mencapainya bersama-sama, manakala kerja yang dilindungi sahaja kekal bersyarat.

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

Penghalang dalam Gelung

Setiap utas mesti menjalankan bilangan penghalang yang sama, jadi gelung dengan bilangan lelaran bergantung pada utas serta penyegerakan dalaman ialah perangkap.

Pemulangan Awal Berisiko

Utas yang mencapai return awal sebelum penghalang tidak akan tiba di situ, jadi synccheck melaporkan utas yang lain tersekat menunggu.

Membaca Laporan

synccheck menamakan penghalang dan utas yang bercapah, supaya Anda boleh menjejaki cabang atau return yang melanggar kontrak.

Penyegerakan Tahap Warp Juga

synccheck turut menyemak topeng __syncwarp, dan menandai apabila utas mengambil bahagian dengan topeng yang tidak sepadan dengan lorongnya.

Tambah Maklumat Baris

Kompil dengan -lineinfo supaya synccheck boleh menunjukkan panggilan penghalang yang tepat, bukannya sekadar menamakan kernel.

nvcc -lineinfo tile.cu -o tile

Satu Alat bagi Setiap Pelaksanaan

Jalankan synccheck dalam laluan tersendiri, berasingan daripada memcheck dan racecheck, kerana setiap alat pengesan ralat menyasarkan kelas ralat yang berbeza.

Semakan Pantas

Apakah masalah yang dikesan secara khusus oleh alat synccheck?

Ringkasan

Anda mempelajari kontrak penghalang, menjalankan synccheck dan membaiki penyegerakan bercapah dengan mengalihkan penghalang keluar daripada cabang. Blok Anda kekal seiring. 🙌

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 “Mengesan Ralat Penyegerakan dengan synccheck” percuma?

Ya — teks penuh “Mengesan Ralat Penyegerakan dengan synccheck” 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 “Mengesan Ralat Penyegerakan dengan synccheck”?

__syncthreads yang bercapah dan bahaya penyegerakan 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 4 daripada 4.

Berapa lamakah pelajaran “Mengesan Ralat Penyegerakan dengan synccheck” 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. Melangkah melalui Kernel dalam cuda-gdb
  2. Mencari Kebocoran dengan memcheck
  3. Mengesan Perlumbaan dengan racecheck
  4. Mengesan Ralat Penyegerakan dengan synccheck
← Kembali ke CUDA Academy