我想使用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位寄存器。