这是参考问题: Intrinsics中Neon的校验和代码实现
打开链接中列出的子问题作为单独的个别问题.因为多个问题不被要求作为单个线程的一部分.
无论如何回答这个问题:
可以ARM和NEON(中的ARM Cortex-A8架构来说的),实际上是在并行工作?我怎样才能做到这一点?
有人可以指向我或分享一些使用ARM-NEON的互操作的示例实现(伪代码/算法/代码,而不是理论实现论文或会谈)吗?(使用intrinsics或inline-asm的实现都可以.)
我正在尝试使用内在函数为NEON实现校验和计算代码(2的补码加法).目前的校验和计算正在ARM上进行.
我的实现从存储器一次取128位到NEON寄存器并进行SIMD(加法),结果从128位数字折叠成16位数.
一切看起来都很好,但我的NEON实现消耗的时间比ARM版本多.
ARM版本需要:0.860000 s NEON版本需要:1.260000 s
注意:
其他详情:
问题:
为什么NEON版本比ARM版本花费更多时间?(虽然我已经注意使用批次中具有最小循环的内在因素)
如何实现我想要实现的目标?(与NEON的效率)
有人可以指向我或分享一些使用ARM-NEON的互操作的示例实现(伪代码/算法/代码,而不是理论实现论文或会谈)吗?
任何帮助将非常感激.
这是我的代码:
uint16_t do_csum(const unsigned char * buff, int len)
{
int odd, count, i;
uint32x4_t result = veorq_u32( result, result), sum = veorq_u32( sum, sum);
uint16x4_t data, data_hi, data_low, data8;
uint16x8_t dataq;
uint16_t result16, disp[20] = {0,0,0,0,0,0,0,0,0,0};
if (len <= 0)
goto out;
odd = 1 & (unsigned long) buff;
if (odd) {
uint8x8_t data1 = veor_u8( data1, data1); …Run Code Online (Sandbox Code Playgroud)