我正在尝试将卡尔曼滤波器应用于从iPhone加速度计输出的数据。我需要尽可能快地执行矩阵乘法和反演,所以我很好奇使用GPU执行这两项任务的可能性。截至目前,我发现矩阵乘法只有一个参考:
float mBone01[16] = { ... }
float mBone02[16] = { ... }
float mResult[16];
glMatrixMode ( GL_MODELVIEW );
glLoadIdentity( );
glLoadMatrix ( mBone01 );
glMultMatrix ( mBone02 );
glGetMatrix ( GL_MODELVIEW, mResult );
即使很难用户也不确定这种乘法是在GPU内部执行的。对于反演,您是否有任何关于如何做(如果可能)的提示?
谢谢大家!
答案 0 :(得分:5)
正如Kornel(和OpenGL FAQ)已经说过的那样,OpenGL没有提供矩阵求逆的实现。
This thread有一些C ++实现,可以与iPhone SDK一起使用
此外,通过调用OpenGL API,您的代码不会在GPU上运行
要使用iPhone的GPU,您必须使用OpenGL ES 2.0,目前仅适用于以下型号:
Apple有一个示例项目,它使用OpenGL ES 2.0和着色器: http://developer.apple.com/iphone/library/samplecode/GLES2Sample/index.html
答案 1 :(得分:2)
在GPU上执行计算的唯一可靠方法是使用shaders。
也就是说,OpenGL和GLSL都没有内置函数来计算逆矩阵,你必须自己编写代码。
答案 2 :(得分:0)
Google代码上的vfpmathlibrary包含用于多个矩阵运算的快速vfp程序集,包括反转。由于需要的开销,这可能会胜过使用着色器。