Assembly 使用霓虹灯在v7臂上进行图像卷积
我正在为用neon(.s或instric)编写的ARMV7汇编中的Raspberry Pi 2寻找一个非常快速的卷积函数 如果这不存在(我搜索了好几天),欢迎任何帮助来编写它,我开始阅读neon程序员指南,但这很难Assembly 使用霓虹灯在v7臂上进行图像卷积,assembly,arm,convolution,neon,meta-raspberrypi,Assembly,Arm,Convolution,Neon,Meta Raspberrypi,我正在为用neon(.s或instric)编写的ARMV7汇编中的Raspberry Pi 2寻找一个非常快速的卷积函数 如果这不存在(我搜索了好几天),欢迎任何帮助来编写它,我开始阅读neon程序员指南,但这很难 我尝试了一个ARM程序的基本函数,它有一个参数和一个返回值,我可以用C++调用它,所以它工作。 我尝试了一个基本的测试,将数据移动到neon寄存器vld1_u8,我可以用vst1_u8检索它,所以头和编译器是可以的 对我来说,最复杂的是设计一个函数并选择正确的指令来实现它: 数据:3
我尝试了一个ARM程序的基本函数,它有一个参数和一个返回值,我可以用C++调用它,所以它工作。 我尝试了一个基本的测试,将数据移动到neon寄存器vld1_u8,我可以用vst1_u8检索它,所以头和编译器是可以的
对我来说,最复杂的是设计一个函数并选择正确的指令来实现它: 数据:320x240灰度图像(有符号8位/像素)速率:20 fps
矩阵:包含从-1到1的浮点值(基本无因子,因子和=0,大小为7x7,但可以扩展为0到8x8) 我试着做:
uint8x8_t ui88Line1 = vld1_u8 ( Data + 8*0 );
uint16x8_t ui816Kernel1 = vmovl_u8 ( ui88Kernel1 );
- 我是否需要将255添加到数据中,而不是处理负值或使用convert u16转换为s16
- 我需要应用7(*64)的移位来保持浮点精度还是使用neon浮点实现
注意:我已经在C/C++中做过了,OpenCV one并没有针对这个平台进行优化。至少显示要矢量化的C代码-这也有助于隐式回答一些缺少的细节,比如输出格式需要是什么以及如何处理边界条件。浮动和固定点实际上取决于您对精度和速度的重视程度。没有正确的答案。至少显示你想要矢量化的C代码-这也将有助于隐式回答一些缺少的细节,比如输出格式需要是什么以及你想要如何处理边界条件。浮动和固定点实际上取决于您对精度和速度的重视程度。没有正确的答案。