Отладка кода 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 в списке Тип отладчика.

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

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

Команды "Выполнить текущий Tile до курсора" и "Выполнить до текущей позиции"

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

  1. По команде Выполнить до текущей позиции приложение выполняется до достижения текущей позиции курсора, после чего выполнение приостанавливается. Это не означает, что текущий поток будет выполнен до позиции курсора. Инициировать приостановку выполнения может любой поток, который первым достигнет текущего положения курсора. См. статью Навигация по коду с помощью отладчика.

  2. По команде Выполнить текущий блок до курсора приложение выполняется до тех пор, пока все потоки в текущем блоке потоков (tile) не достигнут курсора, после чего выполнение приостанавливается.

Окна отладки

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

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

Отладчик может распознавать несколько условий синхронизации данных во время выполнения. При обнаружении условия отладчик переходит в состояние приостановки выполнения. На выбор предлагаются два варианта действий: Прервать или Продолжить. В диалоговом окне Исключения предусмотрены параметры, с помощью которых можно указать, должен ли отладчик распознавать эти условия и при каких из этих условий он должен прерывать выполнение. Дополнительные сведения см. в статье Управление исключениями с помощью отладчика. В диалоговом окне Параметры также есть возможность указать, что отладчик должен игнорировать исключения, если записываемые данные не изменяют значения данных. Для получения дополнительной информации см. General, Debugging, Options Dialog Box.

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

Определение ускорителя

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

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

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

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

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

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

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

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

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