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í nástroj nemůže současně zastavit běh kódu procesoru a kódu GPU při 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íku ř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, jak se dostat na umístění kurzoru. Příkazy pro obě možnosti jsou k dispozici v kontextové 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 poběží k ukazateli; znamená to, že první vlákno, které dosáhne kurzoru, aktivuje přerušení. Viz procházení kódu s ladicím programem

  2. Příkaz Spustit aktuální dlaždici na kurzor spustí vaši aplikaci tak dlouho, dokud všechna vlákna v aktuální dlaždici nedosáhnou kurzoru, a poté přeruší běh.

Ladění windows

Pomocí určitých oken ladění můžete zkoumat, označit a zablokovat vlákna GPU. Další informace najdete tady:

Výjimky synchronizace dat

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 tyto podmínky rozpozná a také pro které podmínky provede přerušení. 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émů

Určení akcelerátoru

Zarážky v kódu GPU se zobrazí pouze v případě, že je kód spuštěný v akcelerátoru::d irect3d_ref (REF) akcelerátoru. 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 nebudou dosaženy, 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 objektů accelerator_view a nastavení projektu pro konfiguraci ladění v jazyce 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. Debugger 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 je mezi nastavením projektu a konfigurací počítače, na kterém ladíte, nekonzistence. Další informace naleznete v tématu Nastavení projektu 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 až při spuštění určit, 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ázána.

Výpočty C++ AMP můžou překročit výchozí časový interval nastavený zjišťováním vypršení č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.