Оптимизация умножения матриц (с использованием Neon Simd и Shader)

0

Мне очень любопытно, какие различия между GLSL/GLSL и NEON

Я знаю, что GLSL использует ядра GPU, а NEON использует ядра CPU.

Однако я смущен, когда я умножаю матрицу на матрицу с помощью инструкции NEON, я не уверен, что это действительно лучший способ, чем умножение матрицы на матрицу в шейдерных кодах, потому что, как вы знаете, GPU имеет гораздо больше ядер, чем процессор даже если NEON существует, чтобы ускорить вычисление.

Кто-нибудь знает, какая разница между двумя способами?

  • 1
    В любом случае, это только ваш выбор, в этом случае Neon быстрее, чем шейдер, потому что если вы используете neon, мы можем использовать оптимизированный векторный расчет, а не скалярный, но если вы спросите о gpgpu, он будет более мощным, когда вам нужно использовать гораздо большие вычисления, такие как решение математических задач. задачи или физические расчеты
Теги:
matrix
shader
opengl-es
opengl-es-2.0

1 ответ

2

Сложно сказать, так как вы обсуждаете набор инструкций процессора, предназначенный главным образом для встроенных приложений (ARM NEON). Это означает, что вы имеете дело со встроенным графическим процессором, который может быть или не быть скалярным по своей природе. Новые графические процессоры являются скалярными, но более старые архитектуры представляют собой векторные и встроенные архитектуры, которые часто имеют более старый дизайн. Поэтому, хотя вы точно знаете, что умножение Matrix на основе NEON является SIMD, в конце концов GLSL оно может быть скалярным или вектором в зависимости от основного GPU.

Но все это обсуждение того, как операции фактически реализованы, не имеет значения в великой схеме вещей. Что действительно важно, так это то, почему вы выполняете матричное умножение. Если это то, что не зависит от вершин или фрагментов, тогда вам обычно лучше делать это на процессоре. В противном случае, несмотря на то, что у графического процессора может быть больше функциональных блоков, вы тратите впустую вычислительные ресурсы, повторяя один и тот же расчет снова и снова.

Ваш вопрос, кажется, подразумевает, что это то, что можно было сделать один раз на процессоре и использовать несколько раз во время затенения, и это будет лучшим подходом к принятию в целом.

  • 0
    Я не понял вашу точку зрения ясно. Давайте сравним два случая. Если в каждом фрейме я умножаю две матрицы в c ++, то это будет mat3 = mat1 x mat2; и он умножается на вектор положения. Этот случай будет быстрее, чем с использованием вершинного шейдера? как gl_position = mat1 x mat2 x позиция? Если да, не могли бы вы рассказать мне больше подробностей?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню