Bagikan melalui


Pemecahan Masalah Kode GPU

Anda dapat men-debug kode C++ yang berjalan pada unit pemrosesan grafis (GPU). Dukungan penelusuran kesalahan GPU di Visual Studio mencakup deteksi balapan, meluncurkan proses dan melampirkannya, dan integrasi ke jendela debugging.

Platform yang Didukung

Debugging 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, atau Windows Server 2016. Untuk debugging pada perangkat keras, Anda harus menginstal driver untuk kartu grafis Anda. Tidak semua vendor perangkat keras mengimplementasikan semua fitur debugger. Lihat dokumentasi vendor untuk batasan.

Nota

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 bisa berhenti pada kode CPU dan kode GPU dalam eksekusi aplikasi yang sama. Secara default, debugger berhenti pada kode CPU. Untuk men-debug 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 Debugging, 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.

Jalankan Petak Peta Saat Ini ke Kursor dan Jalankan ke Kursor

Saat melakukan debugging 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 berhenti. Ini tidak menyiratkan bahwa thread saat ini berjalan menuju kursor; sebaliknya, itu berarti bahwa thread pertama yang mencapai titik kursor menyebabkan terjadinya penghentian. Lihat Menavigasi melalui Kode dengan Debugger

  2. Perintah Jalankan Petak Peta Saat Ini ke Kursor menjalankan aplikasi Anda hingga semua utas dalam petak peta saat ini mencapai kursor lalu berhenti.

Debugging Windows

Dengan menggunakan jendela debugging tertentu, Anda dapat memeriksa, menandai, dan membekukan utas 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 apakah debugger mendeteksi kondisi ini dan juga kondisi mana yang akan dihentikan eksekusinya. Untuk informasi selengkapnya, lihat Mengelola Pengecualian dengan Debugger. Anda juga bisa menggunakan kotak dialog Opsi untuk menentukan bahwa debugger harus mengabaikan pengecualian jika data yang ditulis tidak mengubah nilai data. Untuk informasi selengkapnya, lihat Umum, Penelusuran Kesalahan, Kotak Dialog Opsi.

Troubleshooting

Spesifikasi akselerator

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

Titik Henti Bersyarat

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.

Terdapat masalah konfigurasi dengan Jenis Akselerator Debugging yang dipilih.

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

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

Kesalahan ini terjadi jika Anda melakukan debugging pada PC jarak jauh. Debugger tidak dapat menentukan hingga run time apakah driver diinstal pada PC jarak jauh. Driver tersedia dari produsen kartu grafis.

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

Ada kemungkinan komputasi C++ AMP melebihi durasi interval waktu default yang ditetapkan oleh proses batas waktu deteksi dan pemulihan (TDR) Windows. Ketika itu terjadi, komputasi dibatalkan dan data hilang. Untuk informasi selengkapnya, lihat Menangani TDR di C++ AMP.