При использовании Direct3D сколько математики делается на процессоре? - PullRequest
3 голосов
/ 21 мая 2010

Контекст: я только начинаю. Я даже не касаюсь Direct3D 11 API, а вместо этого смотрю на понимание конвейера и т. Д.

При просмотре документации и информации, распространяющейся по сети, кажется, что некоторые вычисления выполняются приложением. То есть, вместо простого представления матриц для умножения на GPU, вычисления выполняются математической библиотекой, которая работает на CPU . У меня нет конкретных ресурсов, на которые можно было бы указать, хотя я думаю, что могу указать на Математическую библиотеку XNA или образцы, поставленные в февральском DX SDK. Когда вы видите код, подобный mViewProj = mView * mProj;, эта проекция рассчитывается на CPU. Или я не прав?

Если бы вы писали программу, где на экране может быть 10 кубов, где вы можете перемещать или вращать кубы, а также точки обзора, какие вычисления вы бы сделали на ЦП? Я думаю, что я сохраню геометрию для одного куба, а затем преобразую матрицы, представляющие фактические экземпляры. И тогда кажется, что я бы использовал математическую библиотеку XNA или другую из моих возможностей для преобразования каждого куба в пространство модели. Тогда получите координаты в мировом пространстве. Затем отправьте информацию в графический процессор.

Это довольно немного вычислений на процессоре. Я не прав?

  • Делаю ли я выводы, основываясь на слишком малой информации и понимании?
  • Какие условия мне Google, если ответ STFW?
  • Или, если я прав, почему эти вычисления не распространяются и на графический процессор?

РЕДАКТИРОВАТЬ: Кстати, я не использую XNA, но документация отмечает, что XNA Math Library заменяет предыдущую DX Math Library. (Я вижу библиотеку XNA в SDK как библиотеку шаблонов).

1 Ответ

4 голосов
/ 21 мая 2010

«Делаю ли я выводы, основываясь на слишком малой информации и понимании?»

Не так плохо, как все мы, но одним словом: да.

То, что делает GPU, обычно зависит от драйвера GPU и вашего метода доступа. Большую часть времени вам действительно все равно или нужно знать (кроме любопытства и общего понимания).

Для mViewProj = mView * mProj; это, скорее всего, происходит на процессоре. Но это не большая нагрузка (не более 100 циклов). Настоящий трюк - применение новой матрицы представлений о «мире». Каждую вершину нужно более или менее трансформировать вместе с затенением, текстурами, освещением и т. Д. Все, если эта работа будет выполняться в графическом процессоре (если она выполняется на процессоре, все будет очень быстро замедляться).

Как правило, вы вносите в мир изменения высокого уровня, возможно, 20 вычислений с привязкой к ЦП, а графический процессор выполняет миллионы или миллиарды вычислений, необходимых для визуализации мира на основе этих изменений.

В вашем примере с 10 кубами: вы предоставляете преобразование для каждого куба, любая математика, необходимая для создания преобразования, связана с ЦП (за исключением). Вы также предоставляете преобразование для представления, опять же создание матрицы преобразования может быть связано с ЦП. Когда у вас есть 11 новых матриц, вы применяете их к миру. С аппаратной точки зрения необходимо скопировать 11 матриц в GPU ... это произойдет очень, очень быстро ... после того, как будет выполнено копирование CPU, и GPU пересчитывает мир на основе новых данных и отображает их буфер и покачивает его на экране. Таким образом, для ваших 10 кубов вычисления, связанные с процессором, тривиальны.

Посмотрите на некоторый отраженный код для проекта XNA, и вы увидите, где заканчиваются ваши вычисления и начинается XNA (XNA сделает все возможное в GPU).

...