2010-05-20 3 views
3

Контекст: Я только начинаю. Я даже не трогаю Direct3D 11 API, а вместо этого смотрю на понимание трубопровода и т. Д.При использовании Direct3D сколько математики выполняется на процессоре?

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

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

Это довольно немного расчетов по процессору. Я ошибаюсь?

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

EDIT: Кстати, я не использую XNA, но документация отмечает, что XNA Math Library заменяет предыдущую библиотеку DX Math. (я вижу библиотеку XNA в SDK как явную библиотеку шаблонов).

ответ

4

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

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

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

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

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

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

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

+0

«Как правило, вы делаете изменения уровня в мире, возможно, 20 вычислений, связанных с процессором»: Даже для более сложных сцен? Вы бы переделали свою математическую библиотеку (скажем, надавливание вычислений, связанных с ЦП, на GPU)? Или это просто ошибочный дизайн, который имеет большое количество вычислений, связанных с процессором? (Также обратите внимание на мое редактирование, используя C++, а не C# + XNA). – user346582

+0

Использование процессора не является злом: количество вычислений ЦП, которое вы можете выполнять и поддерживающее 60 FPS (минимальный целевой FPS для хорошего пользовательского интерфейса, IMHO), абсолютно безумный по сравнению с современным двухъядерным процессором и с 64-битным, 6-ядерным, 12-канальные 3.5 ГГц процессоры доступны для <$ 1000usd, он только улучшается. Конечно, допустимое% процессорного времени полностью зависит от вас. Существует несколько библиотек для вывода общего расчета на графический процессор: http://stackoverflow.com/questions/1249892/c-perform-operations-on-gpu-not-cpu-calculate-pi. Использование графического процессора в качестве математического сопроцессора определенно находится в движении. – Rusty

+0

Я не считаю процессор злым, но я просто считаю странным, что вычисления, связанные с рендерингом графики, остаются в CPU, а затем есть передний край, чтобы переместить такие вычисления на самое устройство, которое ускоряет рендеринг. Несмотря на это, хорошо иметь подтверждение о вычислениях на процессоре. Спасибо, что нашли время ответить на мой вопрос. – user346582