Menemukan Kebocoran dengan memcheck
Akses di luar batas dan penunjuk perangkat yang keliru
Menemukan Kebocoran dengan memcheck 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.
Mengapa memcheck Ada
Bug memori GPU jarang menyebabkan kerusakan yang jelas, jadi compute-sanitizer dengan alat memcheck mengawasi setiap akses dan melaporkan masalahnya untuk Anda. 🛡️
Perintah Modern
Jalankan program Anda dengan alat memcheck dengan menambahkan compute-sanitizer di awal perintah; alat ini merupakan pengganti modern untuk cuda-memcheck lama.
compute-sanitizer --tool memcheck ./vecaddPembacaan di Luar Batas
Bug klasik yang ditangkap memcheck adalah akses di luar batas, ketika sebuah thread membaca atau menulis melewati akhir larik perangkat.
Pemeriksaan Batas yang Terlewat
Lupa menambahkan penjaga memungkinkan thread tambahan berjalan tanpa kendali, sehingga indeks ini dapat melampaui n dan memicu penulisan global yang tidak valid.
int i = blockIdx.x * blockDim.x + threadIdx.x;
out[i] = a[i] + b[i];Membaca Laporan
memcheck mencetak jenis error, alamat yang bermasalah, dan thread yang menyebabkannya, sehingga Anda dapat langsung menemukan akses yang salah.
Dapatkan Nomor Baris
Kompilasi dengan -lineinfo agar memcheck dapat memetakan setiap error kembali ke baris sumber yang tepat, bukan hanya ke alamat mentah.
nvcc -lineinfo vecadd.cu -o vecaddMendeteksi Kebocoran
Aktifkan opsi --leak-check agar memcheck melaporkan memori perangkat yang Anda alokasikan tetapi tidak pernah dibebaskan sebelum program keluar.
compute-sanitizer --leak-check full ./vecaddKebocoran Klasik
Alokasi tanpa pembebasan yang sesuai menyebabkan buffer bocor, dan setelah banyak iterasi hal itu perlahan menghabiskan memori perangkat.
cudaMalloc(&d_a, bytes);
// ...used, but cudaFree(d_a) is missingPenunjuk Perangkat yang Tidak Valid
memcheck juga menandai pemberian penunjuk host ketika kernel mengharapkan penunjuk perangkat, yaitu kesalahan yang dapat merusak hasil tanpa terlihat.
Akses yang Tidak Selaras
Beberapa pemuatan memerlukan alamat yang selaras, sehingga memcheck memperingatkan tentang akses yang tidak selaras yang jika tidak terdeteksi dapat menghasilkan data sampah atau kesalahan.
Perbaiki dan Jalankan Ulang
Setelah setiap perbaikan, jalankan memcheck lagi hingga melaporkan nol error. Proses yang bersih menandakan bahwa bug memori telah hilang.
Pemeriksaan Singkat
Jenis bug apa yang terutama dirancang untuk ditemukan oleh alat memcheck?
Rangkuman
Anda menjalankan memcheck, menambahkan -lineinfo untuk baris sumber, mengaktifkan pemeriksaan kebocoran, dan mempelajari jenis error yang umum. Proses yang bersih berarti memori aman. ✅
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 “Menemukan Kebocoran dengan memcheck” gratis?
Ya — teks lengkap “Menemukan Kebocoran dengan memcheck” 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 “Menemukan Kebocoran dengan memcheck”?
Akses di luar batas dan penunjuk perangkat yang keliru 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 “Menemukan Kebocoran dengan memcheck” 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
- Menelusuri Kernel Langkah demi Langkah di cuda-gdb
- Menemukan Kebocoran dengan memcheck
- Memburu Perlombaan dengan racecheck
- Menangkap Kesalahan Sinkronisasi dengan synccheck