умножение и инверсия матрицы iPhone - PullRequest
3 голосов
/ 10 января 2010

Я пытаюсь применить фильтр Калмана к данным, поступающим с акселерометра iPhone. Мне нужно выполнить матричное умножение и инверсию как можно быстрее, поэтому мне было интересно узнать о возможности использования GPU для выполнения этих двух задач. На данный момент я нашел только одну ссылку для умножения матриц:

float mBone01[16] = { ... }
float mBone02[16] = { ... }
float mResult[16];

glMatrixMode  ( GL_MODELVIEW );
glLoadIdentity( );
glLoadMatrix  ( mBone01 );
glMultMatrix  ( mBone02 );
glGetMatrix   ( GL_MODELVIEW, mResult );

даже если пользователь не уверен в том, что это умножение выполняется внутри графического процессора. Есть ли у вас подсказка, как сделать (если возможно) то же самое для инверсии?

Спасибо всем!

Ответы [ 3 ]

5 голосов
/ 10 января 2010

Как уже говорил Корнел (и FAQ по OpenGL ), OpenGL не обеспечивает реализацию инверсии матрицы.
Этот поток имеет несколько реализаций C ++, которые должны работать с iPhone SDK.
Кроме того, при вызове API OpenGL ваш код не выполняется на GPU.
Чтобы использовать графический процессор iPhone, вы должны использовать OpenGL ES 2.0, который в настоящее время доступен только на следующих моделях:

  • iPhone 3GS
  • новый iPod touch 32 ГБ
  • новый iPod touch 64 ГБ

У Apple есть пример проекта, в котором используются OpenGL ES 2.0 и шейдеры: http://developer.apple.com/iphone/library/samplecode/GLES2Sample/index.html

2 голосов
/ 10 января 2010

Единственный надежный способ выполнения вычислений на GPU - использование шейдеров .

Тем не менее, ни в OpenGL, ни в GLSL нет встроенной функции для вычисления обратных матриц, вы должны кодировать ее самостоятельно.

0 голосов
/ 10 января 2010

В vfpmathlibrary коде Google содержится быстрая сборка vfp для нескольких операций с матрицами, включая инвертирование. Это, вероятно, выиграло бы от использования шейдеров просто из-за накладных расходов, которые повлекут за собой.

...