如何在霓虹灯的rk3399中使用128位寄存器?

时间:2017-08-16 16:27:18

标签: c++ neon

我想使用neon来优化我的cpp代码。 我使用的是rk3399(http://wiki.t-firefly.com/index.php/Firefly-RK3399/en),它应该有32个128位的寄存器。 我写单个代码来比较我是否使用霓虹灯的时间成本

//sample code A
for (int i = 0; i < vLen; i++)
{   
    ans[i] = f[i] + q[i];
}   

//sample code B    
for (int i = 0; i < vLen; i += 4)
{
    int32x4_t p = vld1q_s32(f + i);
    int32x4_t o = vld1q_s32(q + i);
    int32x4_t tmp = vaddq_s32 (p, o);
    vst1q_s32 ((int32_t*)&ans[i], tmp);
}

我认为代码B应该花费代码A的1/4。但实际上,代码A和B的代价几乎相同。 我想知道为什么以及如何使用128位寄存器来优化我的代码。

顺便说一下,当数据类型不是int32_t而是int8_t时,代码B只花费代码A的1/4时间。似乎只使用了32位寄存器。

0 个答案:

没有答案