Поделиться через


Отладка кода GPU

Вы можете выполнить отладку кода C++ на графическом модуле обработки (GPU). Поддержка отладки GPU в Visual Studio включает обнаружение рас, запуск процессов и присоединение к ним и интеграцию с окнами отладки.

Поддерживаемые платформы

Отладка поддерживается в Windows 7, Windows 8, Windows 10, Windows 11, Windows Server 2008 R2, Windows Server 2012 и Windows Server 2016. Для отладки в эмуляторе программного обеспечения требуется Windows 8, Windows 10, Windows 11 или Windows Server 2012, Windows Server 2016. Для отладки на оборудовании необходимо установить драйверы для графической карты. Не все поставщики оборудования реализуют все функции отладчика. Сведения об ограничениях см. в документации по поставщику.

Замечание

Независимые поставщики оборудования, которые хотят поддерживать отладку GPU в Visual Studio, должны создать библиотеку DLL, реализующую интерфейс VSD3DDebug и предназначенный для своих собственных драйверов.

Настройка отладки GPU

Отладчик не может разорвать код ЦП и код GPU в одном выполнении приложения. По умолчанию отладчик приостанавливает выполнение на коде процессора. Чтобы выполнить отладку кода GPU, используйте один из следующих двух шагов:

  • В списке типов отладки на панели инструментов "Стандартный " выберите только GPU.

  • В обозревателе решений в контекстном меню проекта выберите "Свойства". В диалоговом окне "Страницы свойств " выберите "Отладка", а затем выберите GPU только в списке типов отладчика .

Запуск и присоединение к приложениям

Команды отладки Visual Studio можно использовать для запуска и остановки отладки GPU. Дополнительные сведения см. в разделе "Навигация по коду" с помощью отладчика. Вы также можете подключить отладчик GPU к работающему процессу, но только в том случае, если этот процесс выполняет код GPU. Дополнительные сведения см. в разделе "Подключение к запущенным процессам".

Запуск текущей плитки к курсору и запуск на курсор

При отладке на GPU у вас есть два варианта выполнения до местоположения курсора. Команды для обоих параметров доступны в контекстном меню редактора кода.

  1. Команда Run to Cursor запускает приложение, пока не достигнет расположения курсора, а затем прерывается. Это не означает, что текущий поток выполняется до курсора; скорее, это означает, что первый поток, который достигает курсора, вызывает остановку. См. Навигация по коду с отладчиком

  2. Команда Run Current Tile to Cursor запускает приложение до тех пор, пока все потоки в текущей плитке не достигают курсора, а затем прерываются.

Отладка Windows

С помощью определенных окон отладки можно проверить, пометить и заморозить потоки GPU. Дополнительные сведения можно найти здесь

Исключения синхронизации данных

Отладчик может определить несколько условий синхронизации данных во время выполнения. При обнаружении условия отладчик вводит состояние останова. У вас есть два варианта: разрыв или продолжение. С помощью диалогового окна "Исключения" можно настроить, обнаруживает ли отладчик эти условия, а также какие условия он будет прерывать. Дополнительные сведения см. в разделе "Управление исключениями с помощью отладчика". Можно также использовать диалоговое окно "Параметры" , чтобы указать, что отладчик должен игнорировать исключения, если записанные данные не изменяют значение данных. Дополнительные сведения см. в разделе "Общие", "Отладка", "Параметры".

Устранение неполадок

Указание ускорителя

Точки останова в коде GPU срабатывают только в том случае, если код выполняется на акселераторе::direct3d_ref (REF). Если в коде не указан акселератор, акселератор REF автоматически выбирается в качестве типа акселератора отладки в свойствах проекта. Если код явно выбирает акселератор, то акселератор REF не будет использоваться во время отладки, и точки останова не будут задействованы, если именно ваше оборудование GPU не поддерживает отладку. Это можно исправить, написав код, чтобы он использовал акселератор REF во время отладки. Дополнительные сведения см. в свойствах проекта и использовании объектов акселератора и accelerator_view и параметры проекта для конфигурации отладки C++.

Условные точки останова

Поддерживаются условные точки останова в коде GPU, но не все выражения можно оценить на устройстве. Если выражение не удается оценить на устройстве, оно вычисляется на отладчике. Отладчик, скорее всего, будет работать медленнее, чем устройство.

Ошибка. Возникла проблема с конфигурацией выбранного типа акселератора отладки.

Эта ошибка возникает, когда существует несоответствие между параметрами проекта и конфигурацией компьютера, на котором вы выполняете отладку. Дополнительные сведения см. в разделе "Параметры проекта" для конфигурации отладки C++.

Ошибка. Драйвер отладки для выбранного типа акселератора отладки не установлен на целевом компьютере.

Эта ошибка возникает при отладке на удаленном компьютере. Отладчик не может определить, установлены ли драйверы на удаленном компьютере, до времени выполнения программы. Драйверы доступны от производителя графической карты.

Ошибка: Определение тайм-аута и восстановление (TDR) должно быть отключено на удаленном сайте.

Вычисления C++ AMP могут превышать заданный по умолчанию временной интервал, установленный процессом обнаружения тайм-аута и восстановления в Windows (TDR). В этом случае вычисление отменяется и данные теряются. Дополнительные сведения см. в разделе "Обработка TDR" в C++ AMP.