iPhone矩阵乘法和求逆

3

我正在尝试将卡尔曼滤波器应用于从iPhone加速度计输出的数据。我需要尽快执行矩阵乘法和求逆,因此我很想知道是否有可能使用GPU执行这两个任务。目前,我只找到了一个关于矩阵乘法的参考资料:

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

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

即使用户不确定这个乘法是在GPU内执行的,您有没有关于如何(如果可能)对倒数执行相同操作的提示?

谢谢大家!


看看 MGKalman。它正是你所需要的。 - MohG
3个回答

5
如Kornel(和OpenGL FAQ)所说,OpenGL没有提供矩阵求逆的实现。
这个线程有一些C++实现,应该可以与iPhone SDK一起使用。
此外,通过调用OpenGL API,您的代码并不在GPU上运行。
要使用iPhone的GPU,您必须使用OpenGL ES 2.0,目前仅适用于以下型号:

  • iPhone 3GS
  • 新iPod touch 32GB
  • 新iPod touch 64GB

Apple有一个示例项目,利用了OpenGL ES 2.0和着色器:http://developer.apple.com/iphone/library/samplecode/GLES2Sample/index.html


谢谢!我刚给你投了一票,因为你的答案也是正确的。 - Thomas Zoechling
"你的代码没有在GPU上运行" --> 你可能指的是矩阵代码,因为在其他领域缺乏GPU加速的情况下,在iPhone上使用OpenGL几乎毫无意义。 - Ivan Vučica

2

在GPU上执行计算的唯一可靠方式是使用着色器

尽管如此,OpenGL和GLSL都没有内置用于计算逆矩阵的函数,您需要自己编写代码来实现。


0

Google Code上的vfpmathlibrary包含了多个矩阵运算的快速VFP汇编代码,其中包括一个求逆操作。由于使用着色器会带来额外的开销,因此这可能比使用着色器更优。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接