iOS 4加速使用4x4矩阵的Cblas

6

我一直在研究iOS 4中提供的Accelerate框架。具体来说,我尝试在我的C语言线性代数库中使用Cblas函数。但是,我无法通过使用这些函数来获得比基本例程更好的性能提升。特别是在4x4矩阵乘法的情况下。在我无法利用矩阵的仿射或齐次属性的地方,我一直在使用以下程序(简化):

float *mat4SetMat4Mult(const float *m0, const float *m1, float *target) {
    target[0] = m0[0] * m1[0] + m0[4] * m1[1] + m0[8] * m1[2] + m0[12] * m1[3];
    target[1] = ...etc...
    ...
    target[15] = m0[3] * m1[12] + m0[7] * m1[13] + m0[11] * m1[14] + m0[15] * m1[15];
    return target;
}

Cblas的等效函数调用为:
cblas_sgemm(CblasColMajor, CblasNoTrans, CblasNoTrans,
   4, 4, 4, 1.f, m0, 4, m1, 4, 0.f, target, 4);

通过让它们运行大量预先计算的填充有随机数的矩阵(每个函数每次都获得完全相同的输入),比较两者,使用Cblas例程时,使用C clock()函数计时,速度大约慢了4倍。
这对我来说似乎不太对,我感到自己在某个地方做错了什么。我需要启用设备的NEON单元和SIMD功能吗?或者对于这样小的矩阵,我不应该期望更好的性能?
非常感谢,
巴斯蒂安
2个回答

5
苹果WWDC2010的演示表明,即使是一个3x3矩阵操作,加速仍应该提高速度,因此我会认为你应该在4x4中看到轻微的改善。但是需要考虑的一点是,加速和NEON旨在大大加快整数运算,但不一定是浮点运算。您没有提及CPU处理器,似乎加速将根据您的CPU使用NEON或VFP进行浮点运算。如果使用NEON指令进行32位浮点运算,则应该运行快速,但如果使用VFP进行32位浮点或64位双精度运算,则将运行非常缓慢(因为VFP实际上不是SIMD)。因此,您应确保使用加速的32位浮点运算,并确保它将使用NEON而不是VFP。
另一个问题是,即使它使用NEON,也不能保证您的C编译器将生成比没有NEON指令的简单C函数更快的NEON代码,因为像GCC这样的C编译器经常生成可怕的SIMD代码,可能比标准代码运行更慢。这就是为什么测试生成代码的速度始终很重要,可能手动查看生成的汇编代码以查看编译器是否生成了错误的代码。

请不要在StackOverflow上使用签名,详情请参见FAQ条目 - Georg Fritzsche
谢谢指出没有签名,我不知道这是不好的! - Shervin Emami

4
BLAS和LAPACK库旨在处理“中等到大型矩阵”(边长从几十到数千)。对于较小的矩阵,它们也能给出正确的结果,但性能不如可能达到的好。造成这种情况有以下几个原因:
- 为了获得最佳性能,3x3和4x4的矩阵操作必须内联,而不是使用库;当需要完成的工作很少时,进行函数调用的开销太大了。 - 为了实现最佳性能,需要完全不同的接口。BLAS接口用于矩阵乘法,需要变量来指定计算涉及的矩阵的大小和主导维度,还需要指定是否转置矩阵以及存储布局。所有这些参数使库功能强大,并且对于大型矩阵不会影响性能。然而,当它确定您正在执行4x4计算时,专门用于执行4x4矩阵操作的函数已经完成了。
这对您意味着:如果您希望提供专门的小矩阵操作,请前往bugreport.apple.com并提交错误报告,请求添加此功能。

非常感谢您的帮助。我已经追寻了三天,试图弄清楚为什么我的矩阵操作在使用vDSP时并不像使用简单循环那样快。即使对于只有一个维度较大的矩阵(在我的情况下是4x10,000矩阵),这似乎也是真实的。 - Rob Napier
@RobNapier:出于好奇,您在该矩阵上执行了哪些操作?此外,您使用的是什么硬件,并且使用的是单精度还是双精度? - Stephen Canon
矩阵乘法,尤其是贝塞尔曲线点及其法向量的快速计算一直是我的实验研究对象。欲了解我正在优化的具体功能,请访问http://robnapier.net/blog/equations-matrices-accelerate-607。这只是一个学术项目,以帮助我更好地理解这类问题。我试图使用vDSP实现博客中描述的矩阵操作,但我发现手动计算大部分工作要比vDSP快得多(除了t^2和t^3,这两个才用vDSP_vsq/vDSP_vmul更快)。欢迎提供学习资源指引。 - Rob Napier
硬件是MacBook Pro、iPhone 4和iPad 1。我所有的工作都是在单精度下完成的。 - Rob Napier
@RobNapier:有意思。我会在周末阅读你的帖子,看看我是否有任何想法。 - Stephen Canon

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