Condividi tramite


Debug del codice GPU

È possibile eseguire il debug del codice C++ in esecuzione nell'unità di elaborazione grafica (GPU). Il supporto del debug di GPU in Visual Studio include il rilevamento di race condition, l'avvio di processi e la connessione a essi e l'integrazione nelle finestre di debug.

Piattaforme supportate

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

Nota

I fornitori di hardware indipendenti che desiderano supportare il debug della GPU in Visual Studio devono creare una DLL che implementi l'interfaccia di VSD3DDebug e faccia riferimento ai propri driver.

Configurazione del debug della GPU

Il debugger non può interrompere sia il codice della CPU sia quello della GPU nell'esecuzione della stessa app. Per impostazione predefinita, il debugger interrompe il codice della CPU. Per eseguire il debug del codice della GPU, utilizzare 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 del progetto. Nella finestra di dialogo Pagine delle proprietà, selezionare Debug e Solo GPU nell'elenco Tipo di debugger.

Avvio e associazione di applicazioni

È possibile utilizzare i comandi di debug di Visual Studio per avviare e interrompere il debug della GPU. Per ulteriori informazioni, vedere Avviare, interrompere, eseguire istruzioni, esplorare il codice e arrestare il debug in Visual Studio. È inoltre possibile associare il debugger della GPU a un processo in esecuzione, ma solo se tale processo esegue codice della GPU. Per ulteriori informazioni, vedere Connessione a processi in esecuzione con il debugger di Visual Studio.

Esegui Tile corrente fino al cursore ed Esegui fino al cursore

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

  1. Con il comando Esegui fino al cursore l'app viene eseguita finché non raggiunge la posizione del cursore, quindi si interrompe. Ciò non implica che il thread corrente venga eseguito fino al cursore, ma piuttosto che il primo thread che raggiunge il punto del cursore genera l'interruzione. Vedere Avviare, interrompere, eseguire istruzioni, esplorare il codice e arrestare il debug in Visual Studio

  2. Con il comando Esegui Tile corrente fino al cursore l'app viene eseguita finché tutti thread nel tile corrente non raggiungono il cursore, quindi si interrompe.

Debug di Windows

L'utilizzo di alcune finestre di debug consente di esaminare, contrassegnare e bloccare i thread della GPU. Per ulteriori 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 attivo lo stato di interruzione. Sono disponibili due opzioni: Interrompi o Continua. Tramite la finestra di dialogo Eccezioni è possibile configurare il debugger affinché rilevi o meno tali condizioni nonché quali condizioni causano l'interruzione. Per ulteriori informazioni, vedere Gestione delle eccezioni (debug). È inoltre 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 ulteriori informazioni, vedere Generale, Debug, finestra di dialogo Opzioni.

Risoluzione dei problemi

Specifica di un acceleratore

I punti di interruzione nel codice della GPU vengono raggiunti solo se il codice è in esecuzione nell'acceleratore accelerator::direct3d_ref (REF). Se non si specifica un acceleratore nel codice, l'acceleratore REF viene automaticamente selezionato come Tipo acceleratore debug nelle proprietà del progetto. Se il codice seleziona in modo esplicito un acceleratore, l'acceleratore REF non viene utilizzato durante il debug e i punti di interruzione non vengono raggiunti a meno che l'hardware della GPU non supporti il debug. È possibile risolvere questo problema scrivendo il codice in modo da utilizzare l'acceleratore REF durante il debug. Per ulteriori informazioni, vedere le proprietà del progetto, Utilizzo degli oggetti accelerator e accelerator_view e Impostazioni di progetto per una configurazione di debug C++.

Punti di interruzione condizionali

I punti di interruzione condizionali nel codice della GPU sono supportati, ma non è possibile valutare tutte le espressioni nel dispositivo. Quando un'espressione non può essere valutata nel dispositivo, essa viene valutata nel debugger. È probabile che il debugger sia più lento del dispositivo.

Errore: Problema di configurazione con il tipo di acceleratore di debug selezionato. 

Questo errore si verifica quando è presente un'incoerenza tra le impostazioni del progetto e la configurazione del PC in cui si esegue il debug. Per ulteriori informazioni, vedere Impostazioni di 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 computer remoto. Il debugger non è in grado di determinare se i driver sono installati nel computer remoto fino al runtime. I driver sono disponibili tramite il produttore della scheda grafica.

Errore: Timeout Detection and Recovery (TDR) deve essere disabilitato nel sito remoto.

È possibile che i calcoli di C++ AMP superino l'intervallo predefinito impostato tramite il processo Timeout Detection and Recovery (TDR) di Windows. In tal caso, il calcolo viene annullato e i dati vengono persi. Per ulteriori informazioni, vedere Gestione di TDR in C++ AMP.

Vedere anche

Attività

Procedura dettagliata: debug di un'applicazione C++ AMP

Riferimenti

Impostazioni di progetto per una configurazione di debug C++

Altre risorse

Avviare il debug della GPU in Visual Studio