Sdílet prostřednictvím


Ladění kódu GPU

Můžete ladit kód C++, který běží na grafické procesorové jednotce (GPU). Podpora ladění GPU v sadě Visual Studio zahrnuje detekci časování, spouštění procesů a připojení k nim a integraci do oken ladění.

Podporované platformy

Ladění se podporuje ve Windows 7, Windows 8, Windows 10, Windows 11, Windows Serveru 2008 R2, Windows Serveru 2012 a Windows Serveru 2016. Pro ladění v emulátoru softwaru, Windows 8, Windows 10, Windows 11 nebo Windows Server 2012 se vyžaduje Windows Server 2016. Pro ladění na hardwaru je nutné nainstalovat ovladače grafické karty. Ne všichni dodavatelé hardwaru implementují všechny funkce ladicího programu. Omezení najdete v dokumentaci dodavatele.

Poznámka:

Nezávislí dodavatelé hardwaru, kteří chtějí podporovat ladění GPU v sadě Visual Studio, musí vytvořit knihovnu DLL, která implementuje rozhraní VSD3DDebug a cílí na vlastní ovladače.

Konfigurace ladění GPU

Ladicí program nemůže přerušit kód procesoru i kód GPU ve stejném spuštění aplikace. Ve výchozím nastavení ladicí program přeruší kód procesoru. K ladění kódu GPU použijte jeden z těchto dvou kroků:

  • V seznamu Typ ladění na panelu nástrojů Standard zvolte Pouze GPU.

  • V Průzkumník řešení v místní nabídce projektu zvolte Vlastnosti. V dialogovém okně Stránky vlastností vyberte Ladění a pak vyberte GPU pouze v seznamu Typ ladicího programu.

Spuštění a připojení k aplikacím

Pomocí příkazů ladění sady Visual Studio můžete spustit a zastavit ladění GPU. Další informace najdete v tématu Procházení kódu pomocí ladicího programu. Ladicí program GPU můžete také připojit ke spuštěném procesu, ale pouze v případě, že tento proces spustí kód GPU. Další informace naleznete v tématu Připojení ke spuštěným procesům.

Spuštění aktuální dlaždice na kurzor a spuštění kurzoru

Při ladění na GPU máte dvě možnosti spuštění do umístění kurzoru. Příkazy pro obě možnosti jsou k dispozici v místní nabídce editoru kódu.

  1. Příkaz Spustit do kurzoru spustí aplikaci, dokud nedosáhne umístění kurzoru a pak se přeruší. To neznamená, že aktuální vlákno běží na kurzoru; to znamená, že první vlákno, které dosáhne kurzorového bodu, aktivuje konec. Zobrazení procházení kódu pomocí ladicího programu

  2. Příkaz Spustit aktuální dlaždici na kurzor spustí aplikaci, dokud se na kurzor nedostane všechna vlákna v aktuální dlaždici a pak se přeruší.

Ladění windows

Pomocí určitých oken ladění můžete zkoumat, označit příznakem a ukotvit vlákna GPU. Další informace naleznete v tématu:

výjimky Synchronizace dat hronizace

Ladicí program může během provádění identifikovat několik podmínek synchronizace dat. Když se zjistí podmínka, ladicí program zadá stav přerušení. Máte dvě možnosti – Přerušení nebo Pokračovat. Pomocí dialogového okna Výjimky můžete nakonfigurovat, zda ladicí program zjistí tyto podmínky a také jaké podmínky se přeruší. Další informace naleznete v tématu Správa výjimek pomocí ladicího programu. Pomocí dialogového okna Možnosti můžete také určit, že ladicí program by měl ignorovat výjimky, pokud zapsaná data nezmění hodnotu dat. Další informace naleznete v tématu Obecné, Ladění, Dialogové okno Možnosti.

Řešení problému

Určení akcelerátoru

Zarážky v kódu GPU jsou hity pouze v případě, že kód běží na akcelerátoru ::d irect3d_ref (REF) akcelerátor. Pokud v kódu nezadáte akcelerátor, akcelerátor REF se automaticky vybere jako typ akcelerátoru ladění ve vlastnostech projektu. Pokud váš kód explicitně vybere akcelerátor, akcelerátor REF se během ladění nepoužije a zarážky se nedorazí, pokud váš hardware GPU nepodporuje ladění. Můžete to napravit napsáním kódu tak, aby během ladění používal akcelerátor REF. Další informace naleznete v tématu vlastnosti projektu a použití akcelerátoru a accelerator_view objekty a Nastavení projektu pro konfiguraci ladění jazyka C++.

Podmíněné zarážky

Podmíněné zarážky v kódu GPU se podporují, ale ne každý výraz se dá v zařízení vyhodnotit. Pokud se výraz na zařízení nedá vyhodnotit, vyhodnotí se v ladicím programu. Ladicí program bude pravděpodobně běžet pomaleji než zařízení.

Chyba: U vybraného typu akcelerátoru ladění došlo k problému s konfigurací.

K této chybě dochází v případě, že mezi nastavením projektu a konfigurací počítače, na který provádíte ladění, dochází k nekonzistenci. Další informace naleznete v tématu Project Nastavení pro konfiguraci ladění jazyka C++.

Chyba: Ovladač ladění pro vybraný typ akcelerátoru ladění není nainstalován na cílovém počítači.

K této chybě dochází v případě, že ladíte na vzdáleném počítači. Ladicí program nemůže určit, dokud neběží čas, zda jsou ovladače nainstalovány na vzdáleném počítači. Ovladače jsou k dispozici od výrobce grafické karty.

Chyba: Detekce a obnovení časového limitu (TDR) musí být ve vzdálené lokalitě zakázané.

Výpočty C++ AMP je možné překročit výchozí časový interval nastavený detekcí časového limitu a procesem obnovení (TDR) windows. V takovém případě se výpočet zruší a data se ztratí. Další informace naleznete v tématu Zpracování TDRs v C++ AMP.