OpenGL фрагмент шейдера: сколько разницы в времени вычислений между работой «4 раза по 1 каналу» против «1 раз 4 канала»?Шиндер фрагментов OpenGL: сколько разницы в времени вычислений между работой «4 раза по 1 каналу» и «1 раз 4 канала»?
Например, я мог делать вычисления по 1 канал каждый раз, и я делаю 4 раза.
Или я мог бы поместить всю дату в 4 канала и сделать это 1 раз.
Некоторые вещи, чтобы рассмотреть следующие вопросы: (а) некоторые перегрузки один фрагмент шейдеров нагрузки, (б) время выборки текстур из 1 канала практически равна выборки текстур 4 канала? По сравнению с одним умножением в шейдере, сколько времени текстуры fetech? Если время текстуры fetech не много, и есть много шагов вычисления (включая много умножений, добавление и т. Д.), Тогда нам не нужно много времени уделять текстуре fetech.
(с), сколько разница в времени вычисления 4 раза флоат а * плыви и 1 раз из vec4 (а, а, а, а) * vec4 (а, а, а, а)?
Я точно знаю, что «1 раз 4 канала» быстрее, чем «4 раза по 1 каналу» Но я хочу знать, как это быстрее.
Причина, по которой я рассматриваю «4 раза 1 канал», потому что вся реализация включает в себя несколько проходов. Например, ввод текстуры 1, рендеринга в текстуру 2. Это означает, что есть две текстуры, существующие одновременно. После вычисления текстуры 2 мы можем удалить текстуру 1. Поэтому нам нужна одна дополнительная текстура для памяти GPU. Для 1 канала это означает одну дополнительную текстуру 1-го канала для памяти GPU. Для 4-х каналов это означает дополнительную текстуру 4-х каналов для памяти GPU. Таким образом, это приводит к разнице в пространстве. (Это простой пример. Реальная реализация должна включать в себя больше шагов)
Я хочу сбалансировать компромисс между памятью графического процессора и временем вычисления графического процессора.
Любая идея или ресурс по этим вопросам?
_ "Я знаю, что„1 раз из 4-х каналов“быстрее, чем„4 раза по 1 каналу“Но я хочу чтобы узнать, как это быстрее ». Я хотел бы добавить, что вы можете использовать [сборку текстур] (https://www.opengl.org/sdk/docs/man/html/textureGather.xhtml), чтобы получить 4 сингла -канальные тексели (соседи, используемые для линейной фильтрации текстур) с таким же объемом работы, как 1 четырехканальный тексель. Можете ли вы использовать это в своих интересах, но я не могу сказать, - но для такого подхода на аппаратном уровне DX11 есть некоторые допустимые применения. –
D3D [Справочник по языку HLSL] (https://msdn.microsoft.com/en-us/library/windows/desktop/hh447088%28v=vs.85%29.aspx) делает лучшую работу _much_, объясняющую, как работает эта функция если вас это интересует. –