Как узнать, выполняется ли код с использованием графического процессора или процессора - PullRequest
4 голосов
/ 05 февраля 2012

Есть ли какой-нибудь простой способ узнать, что некоторые коды выполняются в GPU, а не в CPU?

Ответы [ 3 ]

10 голосов
/ 05 февраля 2012

Я думаю, вам нужно понять концепцию разделения работы между CPU и GPU. Если вы что-то кодируете и компилируете с помощью обычного компилятора, который не предназначен для выполнения на графическом процессоре, код всегда будет выполнять процессор.

Все вызовы функций OpenGL или DirectX в вашей основной программе выполняются на процессоре, нет «магического» слоя перевода. Однако некоторые из этих вызовов заставляют графический процессор делать что-то, например рисовать треугольники.

CUDA и OpenCL - языки, нацеленные на архитектуру параллельного выполнения данных. GPU - это такая архитектура. Но код CUDA и OpenCL требует некоторой хост-программы, которая, в свою очередь, будет выполняться на процессоре. То же самое касается программируемых шейдеров (HLSL, GLSL).

Итак: основная часть программы (настройка рабочей среды, выполнение вызовов рендеринга или выполнение с помощью графического процессора) будет работать на CPU. Код, работающий на GPU, скомпилирован в отдельном модуле компиляции (то есть код шейдера GLSL, загруженный в OpenGL, код OpenCL / CUDA, скомпилированный с помощью компилятора OpenCL / CUDA).

1 голос
/ 30 сентября 2015

Зависит от того, какую ОС вы используете, и OpenGL / OpenCL / other, вы можете использовать профилировщик системы, чтобы предоставить вам эту информацию. Системный профилировщик - это часть программного обеспечения, которая отслеживает общесистемную активность и представляет ее в удобочитаемой форме после завершения отслеживания. Например, для Windows вы можете использовать Vtune, который контролирует как CPU, так и GPU.

Надеюсь, это поможет.

1 голос
/ 06 февраля 2012

Как сказал datenwolf, любой код, который вы пишете и который скомпилирован с помощью стандартного компилятора (gcc и т. Д.), Будет запускаться на процессоре. Программы, которые запускаются на GPU, называются шейдерами. Типы переменных в шейдерах отличаются от программ на C / C ++, а синтаксис также более строгий и более ограниченный.

Старые графические приложения работали с двумя типами шейдеров: вершина и фрагмент. Вершинный шейдер работает с любой вершиной геометрии, отправленной на рендер. Фрагментный шейдер будет получать выходные данные от вершинного шейдера (интерполированные по граням геометрии) и будет работать с каждым пикселем или фрагментом геометрии, которая будет отображаться на экране.

Современная графика представила идею Универсальное программирование GPU . Геометрические шейдеры OpenGL и CUDA от Nvidia могут выполнять программирование на GPU общего назначения.

Подводя итог: скомпилированные шейдеры работают на GPU, а скомпилированный C / C ++ работает на CPU.

...