Condividi tramite


Debug del codice GPU

È possibile eseguire il debug di codice C++ in esecuzione nell'unità di elaborazione grafica (GPU). Il supporto per il debug GPU in Visual Studio include il rilevamento delle gare, l'avvio dei processi e il collegamento a tali processi e l'integrazione nelle finestre di debug.

Piattaforme supportate

Il debug è supportato in Windows 7, Windows 8, Windows 10, Windows 11, Windows Server 2008 R2, Windows Server 2012 e Windows Server 2016. Per il debug nell'emulatore software, Windows 8, Windows 10, Windows 11 o Windows Server 2012, è necessario Windows Server 2016. Per il debug nell'hardware, è necessario installare i driver per la scheda grafica. Non tutti i fornitori di hardware implementano tutte le funzionalità del debugger. Per informazioni sulle limitazioni, vedere la documentazione del fornitore.

Annotazioni

I fornitori di hardware indipendenti che vogliono supportare il debug GPU in Visual Studio devono creare una DLL che implementa l'interfaccia VSD3DDebug e abbia come destinazione i propri driver.

Configurazione del debugging della GPU

Il debugger non può interrompersi sia nel codice della CPU che nel codice GPU nella stessa esecuzione dell'app. Per impostazione predefinita, il debugger si interrompe nel codice della CPU. Per eseguire il debug del codice GPU, usare uno dei due passaggi seguenti:

  • Nell'elenco Tipo di debug sulla barra degli strumenti Standard scegliere Solo GPU.

  • In Esplora soluzioni scegliere Proprietà dal menu di scelta rapida per il progetto. Nella finestra di dialogo Pagine delle proprietà selezionare Debug e quindi selezionare Solo GPU nell'elenco Tipo di debugger .

Avvio e collegamento alle applicazioni

È possibile usare i comandi di debug di Visual Studio per avviare e arrestare il debug gpu. Per altre informazioni, vedere Esplorazione del codice con il debugger. È anche possibile collegare il debugger GPU a un processo in esecuzione, ma solo se tale processo esegue codice GPU. Per altre informazioni, vedere Connettersi ai processi in esecuzione.

Esegui riquadro corrente su cursore ed esegui fino al cursore

Quando si esegue il debug nella GPU, sono disponibili due opzioni per l'esecuzione nella posizione del cursore. I comandi per entrambe le opzioni sono disponibili nel menu di scelta rapida dell'editor di codice.

  1. Il comando Esegui su cursore esegue l'app fino a raggiungere la posizione del cursore e quindi si interrompe. Ciò non implica che il thread corrente venga eseguito fino all'indicatore; significa invece che il primo thread a raggiungere l'indicatore attiva l'interruzione. Vedere Esplorazione del codice con il debugger

  2. Il comando Esegui riquadro corrente su cursore esegue l'app fino a quando tutti i thread nel riquadro corrente non raggiungono il cursore e quindi si interrompono.

Risoluzione dei problemi di Windows

Usando determinate finestre di debug, è possibile esaminare, contrassegnare e bloccare i thread GPU. Per altre informazioni, vedere:

Eccezioni di sincronizzazione dei dati

Il debugger può identificare diverse condizioni di sincronizzazione dei dati durante l'esecuzione. Quando viene rilevata una condizione, il debugger entra nello stato di interruzione. Sono disponibili due opzioni: Interrompi o Continua. Usando la finestra di dialogo Eccezioni , è possibile configurare se il debugger rileva queste condizioni e quali condizioni verranno interrotte. Per altre informazioni, vedere Gestione delle eccezioni con il debugger. È anche possibile utilizzare la finestra di dialogo Opzioni per specificare che il debugger deve ignorare le eccezioni se i dati scritti non modificano il valore dei dati. Per altre informazioni, vedere Generale, Debug, Finestra di dialogo Opzioni.

Risoluzione dei problemi

Specificare un acceleratore

I punti di arresto nel codice GPU vengono colpiti solo se il codice è in esecuzione sull'acceleratore::direct3d_ref (REF). Se non si specifica un acceleratore nel codice, l'acceleratore REF viene selezionato automaticamente come Tipo di acceleratore di debug nelle proprietà del progetto. Se il codice seleziona in modo esplicito un acceleratore, l'acceleratore REF non verrà usato durante il debug e i punti di interruzione non verranno raggiunti a meno che l'hardware GPU non disponga del supporto per il debug. È possibile risolvere questo problema scrivendo il codice in modo che usi l'acceleratore REF durante il debug. Per altre informazioni, vedere Proprietà del progetto e Uso dell'acceleratore e accelerator_view oggetti e impostazioni di progetto per una configurazione di debug C++.

Punti di interruzione condizionali

I punti di interruzione condizionali nel codice GPU sono supportati, ma non tutte le espressioni possono essere valutate nel dispositivo. Quando un'espressione non può essere valutata nel dispositivo, viene valutata nel debugger. È probabile che il debugger venga eseguito più lentamente del dispositivo.

Errore: si è verificato un problema di configurazione con il tipo di acceleratore di debug selezionato.

Questo errore si verifica quando si verifica un'incoerenza tra le impostazioni del progetto e la configurazione del PC su cui si esegue il debug. Per ulteriori informazioni, vedere Impostazioni del Progetto per una Configurazione di Debug C++.

Errore: il driver di debug per il tipo di acceleratore di debug selezionato non è installato nel computer di destinazione.

Questo errore si verifica se si esegue il debug in un PC remoto. Il debugger non è in grado di determinare fino a quando non viene eseguita l'installazione dei driver nel PC remoto. I driver sono disponibili dal produttore della scheda grafica.

Errore: il rilevamento del timeout e il ripristino (TDR) devono essere disabilitati nel sito remoto.

È possibile che i calcoli C++ AMP superino l'intervallo di tempo predefinito impostato dal processo di rilevamento e ripristino di timeout di Windows. In questo caso, il calcolo viene annullato e i dati vengono persi. Per altre informazioni, vedere Gestione di TDR in C++ AMP.