Bagikan melalui


Men-debug Kode GPU

Anda dapat menelusuri kesalahan kode C++ yang berjalan pada unit pemrosesan grafis (GPU). Dukungan penelusuran kesalahan GPU di Visual Studio mencakup deteksi balapan, proses peluncuran dan melampirkannya, serta integrasi ke jendela penelusuran kesalahan.

Platform yang Didukung

Penelusuran kesalahan didukung pada Windows 7, Windows 8, Windows 10, Windows 11, Windows Server 2008 R2, Windows Server 2012 dan Windows Server 2016. Untuk penelusuran kesalahan pada emulator perangkat lunak, diperlukan Windows 8, Windows 10, Windows 11, atau Windows Server 2012, Windows Server 2016. Untuk penelusuran kesalahan pada perangkat keras, Anda harus menginstal driver untuk kartu grafis Anda. Tidak semua vendor perangkat keras menerapkan semua fitur debugger. Lihat dokumentasi vendor untuk batasan.

Catatan

Vendor perangkat keras independen yang ingin mendukung penelusuran kesalahan GPU di Visual Studio harus membuat DLL yang mengimplementasikan antarmuka VSD3DDebug dan menargetkan driver mereka sendiri.

Mengonfigurasi Penelusuran Kesalahan GPU

Debugger tidak dapat berhenti pada kode CPU dan kode GPU dalam eksekusi aplikasi yang sama. Secara default, debugger diputus pada kode CPU. Untuk menelusuri kesalahan kode GPU, gunakan salah satu dari dua langkah berikut:

  • Di daftar Jenis Debug pada toolbar Standar, pilih GPU Saja.

  • Di Penjelajah Solusi, pada menu pintasan untuk proyek, pilih Properti. Dalam kotak dialog Halaman Properti, pilih Penelusuran kesalahan, lalu pilih GPU Saja di daftar Jenis Debugger.

Meluncurkan dan Melampirkan ke Aplikasi

Anda dapat menggunakan perintah penelusuran kesalahan Visual Studio untuk memulai dan menghentikan penelusuran kesalahan GPU. Untuk informasi selengkapnya, lihat Menavigasi melalui Kode dengan Debugger. Anda juga dapat melampirkan debugger GPU ke proses yang sedang berjalan, tetapi hanya jika proses tersebut menjalankan kode GPU. Untuk informasi selengkapnya, lihat Melampirkan ke Proses yang Sedang Berjalan.

Menjalankan Petak Peta Saat Ini ke Kursor dan Menjalankan ke Kursor

Saat Anda menelusuri kesalahan pada GPU, Anda memiliki dua opsi untuk menjalankan ke lokasi kursor. Perintah untuk kedua opsi tersedia pada menu pintasan editor kode.

  1. Perintah Jalankan ke Kursor menjalankan aplikasi Anda hingga mencapai lokasi kursor lalu diputus. Ini tidak menyiratkan bahwa rangkaian saat ini berjalan ke kursor; sebaliknya, ini berarti bahwa rangkaian pertama yang mencapai titik kursor memicu jeda. Lihat Menavigasi Kode dengan Debugger

  2. Perintah Jalankan Petak Peta Saat Ini ke Kursor menjalankan aplikasi hingga semua rangkaian di petak peta saat ini mencapai kursor lalu terputus.

Jendela Penelusuran Kesalahan

Dengan menggunakan jendela penelusuran kesalahan tertentu, Anda dapat memeriksa, menandai, dan membekukan rangkaian GPU. Untuk informasi selengkapnya, lihat:

Pengecualian Sinkronisasi Data

Debugger dapat mengidentifikasi beberapa kondisi sinkronisasi data selama eksekusi. Saat kondisi terdeteksi, debugger memasuki status jeda. Anda memiliki dua opsi—Putuskan atau Lanjutkan. Dengan menggunakan kotak dialog Pengecualian, Anda dapat mengonfigurasi jika debugger mendeteksi kondisi ini dan juga kondisi mana yang akan memicu pemutusan. Untuk informasi selengkapnya, lihat Mengelola Pengecualian dengan Debugger. Anda juga dapat menggunakan kotak dialog Opsi untuk menentukan bahwa debugger harus mengabaikan pengecualian jika data yang ditulis tidak mengubah nilai data. Untuk informasi selengkapnya, lihat Kotak Dialog Umum, Penelusuran Kesalahan, Opsi.

Pemecahan Masalah

Menentukan akselerator

Titik henti dalam kode GPU hanya tercapai jika kode berjalan pada akselerator accelerator::direct3d_ref (REF). Jika Anda tidak menentukan akselerator dalam kode, akselerator REF secara otomatis dipilih sebagai Jenis Akselerator Penelusuran Kesalahan di properti proyek. Jika kode secara eksplisit memilih akselerator, maka akselerator REF tidak akan digunakan selama penelusuran kesalahan dan titik henti tidak akan tercapai kecuali perangkat keras GPU memiliki dukungan penelusuran kesalahan. Anda dapat memperbaikinya dengan menulis kode sehingga menggunakan akselerator REF selama penelusuran kesalahan. Untuk informasi selengkapnya, lihat properti proyek dan Menggunakan akselerator dan Objek accelerator_view dan Pengaturan Proyek untuk Konfigurasi Debug C++.

Titik Henti Kondisional

Titik henti kondisional dalam kode GPU didukung, tetapi tidak setiap ekspresi dapat dievaluasi pada perangkat. Saat ekspresi tidak dapat dievaluasi pada perangkat, ekspresi dievaluasi pada debugger. Debugger kemungkinan berjalan lebih lambat daripada perangkat.

Kesalahan: Ada masalah konfigurasi pada Jenis Akselerator Penelusuran Kesalahan yang dipilih.

Kesalahan ini terjadi saat ada ketidakkonsistensian antara pengaturan proyek dan konfigurasi PC yang Anda telusuri kesalahannya. Untuk informasi selengkapnya, lihat Pengaturan Proyek untuk Konfigurasi Debug C++.

Kesalahan: Driver debug untuk Jenis Akselerator Penelusuran Kesalahan yang dipilih tidak diinstal pada komputer target.

Kesalahan ini terjadi jika Anda menelusuri kesalahan pada PC jarak jauh. Debugger tidak dapat menentukan hingga durasi, apakah driver diinstal pada PC jarak jauh atau tidak. Driver tersedia dari produsen kartu grafis.

Kesalahan: Deteksi dan Pemulihan Batas Waktu (TDR) harus dinonaktifkan di situs jarak jauh.

Dimungkinkan bagi komputasi C++ AMP untuk melebihi interval waktu default yang ditetapkan oleh Jendela proses pemulihan dan deteksi batas waktu (TDR). Saat hal ini terjadi, komputasi dibatalkan dan data hilang. Untuk informasi selengkapnya, lihat Menangani TDR di C++ AMP.