Debugowanie kodu GPU

Możesz debugować kod języka C++, który jest uruchomiony w jednostce przetwarzania grafiki (GPU). Obsługa debugowania procesora GPU w programie Visual Studio obejmuje wykrywanie wyścigu, uruchamianie procesów i dołączanie do nich oraz integrację z oknami debugowania.

Obsługiwane platformy

Debugowanie jest obsługiwane w systemach Windows 7, Windows 8, Windows 10, Windows 11, Windows Server 2008 R2, Windows Server 2012 i Windows Server 2016. Do debugowania w emulatorze oprogramowania wymagany jest system Windows 8, Windows 10, Windows 11 lub Windows Server 2012. Aby debugować na sprzęcie, należy zainstalować sterowniki dla karty graficznej. Nie wszyscy dostawcy sprzętu implementują wszystkie funkcje debugera. Zapoznaj się z dokumentacją dostawcy, aby uzyskać informacje o ograniczeniach.

Uwaga

Niezależni dostawcy sprzętu, którzy chcą obsługiwać debugowanie procesora GPU w programie Visual Studio, muszą utworzyć bibliotekę DLL, która implementuje interfejs VSD3DDebug i jest przeznaczona dla własnych sterowników.

Konfigurowanie debugowania procesora GPU

Debuger nie może przerwać działania zarówno kodu procesora CPU, jak i kodu procesora GPU w tym samym wykonaniu aplikacji. Domyślnie debuger przerywa działanie kodu procesora CPU. Aby debugować kod procesora GPU, wykonaj jedną z następujących dwóch kroków:

  • Na liście Typ debugowania na pasku narzędzi w warstwie Standardowa wybierz pozycję Tylko procesor GPU.

  • W Eksplorator rozwiązań w menu skrótów projektu wybierz pozycję Właściwości. W oknie dialogowym Strony właściwości wybierz pozycję Debugowanie, a następnie wybierz pozycję Tylko procesor GPU na liście Typ debugera.

Uruchamianie i dołączanie do aplikacji

Polecenia debugowania programu Visual Studio umożliwiają uruchamianie i zatrzymywanie debugowania procesora GPU. Aby uzyskać więcej informacji, zobacz Nawigowanie po kodzie za pomocą debugera. Debuger procesora GPU można również dołączyć do uruchomionego procesu, ale tylko wtedy, gdy ten proces wykonuje kod procesora GPU. Aby uzyskać więcej informacji, zobacz Dołączanie do uruchomionych procesów.

Uruchamianie bieżącego kafelka do kursora i uruchamianie do kursora

Podczas debugowania na procesorze GPU masz dwie opcje uruchamiania do lokalizacji kursora. Polecenia dla obu opcji są dostępne w menu skrótów edytora kodu.

  1. Polecenie Uruchom do kursora uruchamia aplikację, dopóki nie osiągnie lokalizacji kursora, a następnie ulegnie awarii. Nie oznacza to, że bieżący wątek jest uruchamiany do kursora; oznacza to, że pierwszy wątek, który osiąga punkt kursora, wyzwala przerwę. Zobacz Nawigowanie po kodzie za pomocą debugera

  2. Polecenie Uruchom bieżący kafelek do kursora uruchamia aplikację do momentu, aż wszystkie wątki w bieżącym kafelku osiągną kursor, a następnie przerwy.

Debugowanie systemu Windows

Korzystając z niektórych okien debugowania, można sprawdzać, flagować i blokować wątki procesora GPU. Aby uzyskać więcej informacji, zobacz:

Wyjątki synchronizacji danych

Debuger może zidentyfikować kilka warunków synchronizacji danych podczas wykonywania. Po wykryciu warunku debuger wprowadza stan przerwania. Dostępne są dwie opcje— Przerwij lub Kontynuuj. Korzystając z okna dialogowego Wyjątki , można skonfigurować, czy debuger wykrywa te warunki, a także jakie warunki zostaną przerwane. Aby uzyskać więcej informacji, zobacz Zarządzanie wyjątkami za pomocą debugera. Możesz również użyć okna dialogowego Opcje , aby określić, że debuger powinien ignorować wyjątki, jeśli zapisane dane nie zmieniają wartości danych. Aby uzyskać więcej informacji, zobacz Ogólne, Debugowanie, Opcje , Okno dialogowe.

Rozwiązywanie problemów

Określanie akceleratora

Punkty przerwania w kodzie procesora GPU są osiągane tylko wtedy, gdy kod jest uruchomiony w akceleratorze accelerator::d irect3d_ref (REF). Jeśli nie określisz akceleratora w kodzie, akcelerator REF zostanie automatycznie wybrany jako Typ akceleratora debugowania we właściwościach projektu. Jeśli kod jawnie wybierze akcelerator, akcelerator REF nie będzie używany podczas debugowania, a punkty przerwania nie zostaną trafione, chyba że sprzęt procesora GPU ma obsługę debugowania. Aby rozwiązać ten problem, możesz napisać kod, aby używał akceleratora REF podczas debugowania. Aby uzyskać więcej informacji, zobacz właściwości projektu oraz Using accelerator and accelerator_view Objects and Project Ustawienia for a C++ Debug Configuration (Używanie akceleratora oraz obiektów accelerator_view i projektu Ustawienia dla konfiguracji debugowania języka C++).

Warunkowe punkty przerwania

Warunkowe punkty przerwania w kodzie procesora GPU są obsługiwane, ale nie każde wyrażenie można ocenić na urządzeniu. Gdy na urządzeniu nie można ocenić wyrażenia, jest ono oceniane na debugerze. Debuger może działać wolniej niż urządzenie.

Błąd: Wystąpił problem z konfiguracją z wybranym typem akceleratora debugowania.

Ten błąd występuje, gdy występuje niespójność między ustawieniami projektu a konfiguracją komputera, na którym debugujesz. Aby uzyskać więcej informacji, zobacz Project Ustawienia for a C++ Debug Configuration (Konfiguracja debugowania języka C++).

Błąd: Sterownik debugowania dla wybranego typu akceleratora debugowania nie jest zainstalowany na maszynie docelowej.

Ten błąd występuje w przypadku debugowania na komputerze zdalnym. Debuger nie może określić czasu wykonywania, czy sterowniki są zainstalowane na komputerze zdalnym. Sterowniki są dostępne od producenta karty graficznej.

Błąd: Wykrywanie limitu czasu i odzyskiwanie (TDR) muszą być wyłączone w lokacji zdalnej.

Obliczenia C++ AMP mogą przekraczać domyślny interwał czasu ustawiony przez proces wykrywania limitu czasu systemu Windows i odzyskiwania (TDR). W takim przypadku obliczenia zostaną anulowane i dane zostaną utracone. Aby uzyskać więcej informacji, zobacz Obsługa TDR w języku C++ AMP.