相关疑难解决方法(0)

13
推荐指数
3
解决办法
9198
查看次数

NEON ASM代码运行速度比C代码慢得多?

我正在尝试使用NEON在iPhone ARM上针对特定问题实现Gauss-Newton优化.下面的第一个函数是我原来的C函数.第二个是我写的NEON asm代码.我每次运行100,000次,NEON版本比C版本长7-8倍.我认为加载(vld1.32)是大部分时间.我通过删除一些指令进行了实验.

有没有人对这个问题有任何见解?谢谢!

template<class T>
inline void GaussNewtonOperationJtr8x8(T Jtr[8], const T J[8], T residual)
{
    Jtr[0] -= J[0]*residual;
    Jtr[1] -= J[1]*residual;
    Jtr[2] -= J[2]*residual;
    Jtr[3] -= J[3]*residual;
    Jtr[4] -= J[4]*residual;
    Jtr[5] -= J[5]*residual;
    Jtr[6] -= J[6]*residual;
    Jtr[7] -= J[7]*residual;    
}

inline void GaussNewtonOperationJtr8x8_NEON(NFloat Jtr[8], const NFloat J[8], NFloat residual)
{
    __asm__ volatile (
                      // load Jtr into registers
                      "vld1.32   {d0-d3}, [%0]\n\t"
                      // load J into registers
                      "vld1.32   {d4-d7}, [%1]\n\t"
                      // load residual in register
                      "vmov.f32  s16, %2\n\t"
                      // Jtr …
Run Code Online (Sandbox Code Playgroud)

assembly arm neon

4
推荐指数
1
解决办法
3915
查看次数

标签 统计

arm ×1

assembly ×1

core-animation ×1

iphone ×1

neon ×1