Kondisi Balapan pada GPU
Mengapa penulisan bersamaan merusak data.
Kondisi Balapan pada GPU adalah pelajaran CUDA Academy gratis di CoddyKit. Ini adalah pelajaran 1 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.
Banyak Tangan, Satu Penghitung
Di GPU, ribuan thread dapat mengakses memori yang sama secara bersamaan. Ketika beberapa thread menulis ke satu lokasi secara bersamaan, terjadi kondisi balapan. 🏁
Apa Sebenarnya Kondisi Balapan Itu
Kondisi balapan terjadi ketika hasil akhir bergantung pada urutan eksekusi thread yang tidak dapat diprediksi. Kodenya sama, tetapi hasilnya berbeda pada setiap peluncuran.
Baca-Ubah-Tulis
Menambah penghitung sebenarnya terdiri dari tiga langkah: membaca nilai, menambahkan satu, lalu menulisnya kembali. Urutan baca-ubah-tulis inilah yang menimbulkan masalah.
counter = counter + 1;Cara Langkah-Langkah Saling Berselang
Dua thread sama-sama membaca 5, sama-sama menghitung 6, lalu sama-sama menulis 6. Anda mengharapkan 7, tetapi mendapatkan 6. Satu penambahan hilang tanpa disadari.
Pembaruan yang Hilang
Penambahan yang hilang itu disebut pembaruan yang hilang. Dengan ribuan thread yang berlomba, puluhan atau ratusan pembaruan dapat hilang sekaligus.
Kernel yang Tampak Benar
Kernel ini tampak benar, tetapi setiap thread berlomba mengakses alamat yang sama. Jumlah akhir akan salah dan bervariasi pada setiap eksekusi.
__global__ void count(int* total) {
*total = *total + 1;
}Mengapa Hasilnya Tidak Deterministik
Perangkat keras tidak pernah menjamin urutan thread. Karena itu, kernel yang mengalami kondisi balapan bersifat tidak deterministik: kernel bahkan dapat berhasil pada input kecil dan gagal pada input besar.
Pembacaan Saja Aman
Banyak thread yang membaca nilai yang sama tidak menjadi masalah. Masalah baru muncul ketika setidaknya satu thread menulis sementara thread lain membaca atau menulis.
Penulisan ke Lokasi Berbeda Juga Aman
Jika setiap thread menulis ke slot unik miliknya sendiri, seperti out[i], tidak ada konflik. Kondisi balapan memerlukan thread yang mengarah ke lokasi yang sama.
out[i] = a[i] + b[i];Pratinjau Solusi
Solusinya adalah membuat operasi baca-ubah-tulis berlangsung sebagai satu langkah yang tidak dapat dipisahkan. Itulah operasi atomik, yang akan dibahas pada pelajaran berikutnya. ⚛️
Menemukan Kondisi Balapan Saat Meninjau
Saat meninjau kernel, tanyakan: apakah dua thread menulis ke alamat yang sama tanpa perlindungan? Jika ya, hampir pasti terdapat kondisi balapan data.
Pemeriksaan Cepat
Mari pastikan gagasan tentang kondisi balapan ini sudah Anda pahami.
Rangkuman: Kondisi Balapan pada GPU
Anda telah mempelajari bahwa operasi baca-ubah-tulis pada data bersama tanpa perlindungan menyebabkan kondisi balapan dan pembaruan yang hilang. Operasi atomik yang akan dibahas berikutnya membuat langkah-langkah tersebut tidak dapat dipisahkan. ✅
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 “Kondisi Balapan pada GPU” gratis?
Ya — teks lengkap “Kondisi Balapan pada GPU” 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 “Kondisi Balapan pada GPU”?
Mengapa penulisan bersamaan merusak data. 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 1 dari 4.
Berapa lama pelajaran “Kondisi Balapan pada GPU” 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
- Kondisi Balapan pada GPU
- atomicAdd dan Rekan-rekannya
- Bangun Histogram
- Operasi Atomik Kustom dengan atomicCAS