CUDA Academy · Pelajaran

Kondisi Balapan pada GPU

Mengapa penulisan bersamaan merusak data.

Pelajaran 1 dari 413 langkah

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

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 “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

  1. Kondisi Balapan pada GPU
  2. atomicAdd dan Rekan-rekannya
  3. Bangun Histogram
  4. Operasi Atomik Kustom dengan atomicCAS
← Kembali ke CUDA Academy