Partilhar via


Depurando código de GPU

Você pode depurar código C++ que está sendo executado na unidade de processamento gráfico (GPU). O suporte à depuração de GPU no Visual Studio inclui a detecção de concorrência, início de processos e anexação a eles, e a integração nas janelas de depuração.

Plataformas compatíveis

Há suporte para depuração no Windows 7, Windows 8, Windows 10, Windows 11, Windows Server 2008 R2, Windows Server 2012 e Windows Server 2016. Para depuração no emulador de software, é necessário Windows 8, Windows 10, Windows 11 ou Windows Server 2012, Windows Server 2016. Para depurar no hardware, você deve instalar os drivers para a sua placa gráfica. Nem todos os fornecedores de hardware implementam todos os recursos do depurador. Consulte a documentação do fornecedor para conhecer as restrições.

Observação

Fornecedores de hardware independentes que desejam oferecer suporte à depuração de GPU no Visual Studio devem criar uma DLL que implementa a interface do VSD3DDebug e destinam-se a seus próprios drivers.

Configurando a depuração de GPU

O depurador não pode interromper no código de CPU e no código de GPU na mesma execução do aplicativo. Por padrão, o depurador será interrompido no código da CPU. Para depurar o código de GPU, use uma destas duas etapas:

  • Na lista Tipo de Depuração na barra de ferramentas Padrão, escolha Somente GPU.

  • No Gerenciador de Soluções, no menu de atalho do projeto, selecione Propriedades. Na caixa de diálogo Páginas de Propriedades, selecione Depuração e Somente GPU na lista Tipo de Depurador.

Iniciando e anexando a aplicativos

Você pode usar os comandos de depuração do Visual Studio para iniciar e interromper a depuração de GPU. Para obter mais informações, veja Navegação pelo código com o depurador. Você também pode anexar o depurador de GPU a um processo em execução, mas somente se esse processo executar o código de GPU. Para obter mais informações, consulte Anexar a processos em execução.

Executar o bloco atual até o cursor e executar até o cursor

Quando você estiver depurando no GPU, terá duas opções para executar até o local do cursor. Os comandos para as duas opções estão disponíveis no menu de atalho do editor de códigos.

  1. O comando Executar até o Cursor executa seu aplicativo até alcançar a localização do cursor e, em seguida, é interrompido. Isso não significa que o thread atual é executado até o cursor; significa que o primeiro thread que alcançar o ponto do cursor dispara a interrupção. Consulte Navegar pelo código com o depurador

  2. O comando Executar Bloco Atual até o Cursor executa seu aplicativo até que todos os threads no bloco atual atinjam o cursor e, em seguida, seja interrompido.

Janelas de depuração

Ao usar determinadas janelas de depuração, você pode examinar, sinalizar e congelar threads de GPU. Para obter mais informações, consulte:

Exceções de sincronização de dados

O depurador pode identificar várias condições de sincronização de dados durante a execução. Quando uma condição for detectada, o depurador entrará no estado de interrupção. Você tem duas opções: Interromper ou Continuar. Usando a caixa de diálogo Exceções, você pode configurar se o depurador detecta essas condições e também para quais condições ele interromperá. Para obter mais informações, consulte Gerenciar exceções com o depurador. Você também pode usar a caixa de diálogo Opções para especificar que o depurador deverá ignorar exceções se os dados gravados não alterarem o valor dos dados. Para obter mais informações, consulte Geral, depuração, Caixa de diálogo Opções.

Solução de problemas

Especificando um acelerador

Os pontos de interrupção no código de GPU serão atingidos apenas se o código estiver em execução no acelerador accelerator::direct3d_ref (REF). Se você não especificar um acelerador em seu código, o acelerador REF será selecionado automaticamente como o Tipo de Acelerador de Depuração nas propriedades do projeto. Se seu código selecionar explicitamente um acelerador, o acelerador REF não será usado durante a depuração e os pontos de interrupção não serão atingidos a menos que seu hardware de GPU tiver suporte à depuração. Você pode solucionar isso escrevendo seu código de forma que use um acelerador REF durante a depuração. Para obter mais informações, consulte Propriedades do projeto e Usando acelerador e accelerator_view Objetos e Configurações de Projeto para uma Configuração de Depuração do C++.

Pontos de interrupção condicionais

Os pontos de interrupção condicionais no código de GPU têm suporte, mas nem todas as expressões podem ser avaliadas no dispositivo. Quando uma expressão não pode ser avaliada no dispositivo, ela será avaliada no depurador. O depurador provavelmente será executado com mais lentidão do que no dispositivo.

Erro: problema de configuração no Tipo de Acelerador de Depuração.

Esse erro ocorre quando há uma inconsistência entre as configurações de projeto e a configuração do PC no qual você está depurando. Para obter mais informações, consulte Configurações de projeto para uma configuração de depuração do C++.

Erro: o driver de depuração do Tipo de Acelerador de Depuração selecionado não está instalado no computador de destino.

Esse erro ocorrerá se você estiver depurando em um PC remoto. O depurador não poderá determinar até o tempo de execução se os drivers estiverem instalados no PC remoto. Os drivers estão disponíveis com o fabricante da placa gráfica.

Erro: a TDR (Detecção de Tempo Limite e Recuperação) deve ser desabilitada no site remoto.

É possível que as computações de C++ AMP excedam o intervalo de tempo padrão que é definido pela detecção de tempo limite do Windows e pelo processo de recuperação (TDR). Quando isso acontecer, a computação será cancelada e os dados serão perdidos. Para obter mais informações, confira Manipulando TDRs em C++ AMP.