我正在为 Raspberry Pi 2 寻找一个非常快速的卷积函数,它是用带有霓虹灯(.s 或 instric)的 ARM v7 程序集编写的。
如果这不存在(我搜索了几天)欢迎任何帮助编写它,我开始阅读霓虹程序员指南但它非常难......
我在 ARM 程序集中尝试了一个带有参数和返回值的基本函数,我可以从 C++ 调用它,所以它可以工作。
我通过将数据移动到霓虹灯寄存器vld1_u8尝试了一个基本测试,我可以用vst1_u8检索它,所以头文件和编译器没问题......
对我来说最复杂的是设计一个函数并选择正确的指令来实现它:
数据:320x240 灰度图像(每像素有符号 8 位)
速率:20 fps
矩阵:包含从 -1 到 1 的浮点值(基本无因子,因子总和 = 0,大小 7x7,但可以扩展为 0 到 8x8)。
我尝试这样做:
将内存传输到 64 位寄存器:
uint8x8_t ui88Line1 = vld1_u8 ( Data + 8*0 );
将数据从 64 位寄存器传输到 128 位,其中 8 位到 16 位转换有符号。
uint16x8_t ui816Kernel1 = vmovl_u8 ( ui88Kernel1 );
对于其余的我正在寻找:
- 我是否需要在我的数据中添加 255 而不是处理负值或使用将 u16 转换为 s16?
- 我是否需要应用 7 ( * 64 ) 的移位来保存浮点精度或使用霓虹浮点实现?
我真的需要大师的帮助才能做出更好的选择。
注意:我已经在 C/C++ 中做过,OpenCV 没有针对这个平台进行优化。