Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 使用霓虹灯在v7臂上进行图像卷积_Assembly_Arm_Convolution_Neon_Meta Raspberrypi - Fatal编程技术网

Assembly 使用霓虹灯在v7臂上进行图像卷积

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

我正在为用neon(.s或instric)编写的ARMV7汇编中的Raspberry Pi 2寻找一个非常快速的卷积函数

如果这不存在(我搜索了好几天),欢迎任何帮助来编写它,我开始阅读neon程序员指南,但这很难

我尝试了一个ARM程序的基本函数,它有一个参数和一个返回值,我可以用C++调用它,所以它工作。 我尝试了一个基本的测试,将数据移动到neon寄存器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添加到数据中,而不是处理负值或使用convert u16转换为s16
    • 我需要应用7(*64)的移位来保持浮点精度还是使用neon浮点实现
    我真的需要上师的帮助来做出更好的选择


    注意:我已经在C/C++中做过了,OpenCV one并没有针对这个平台进行优化。

    至少显示要矢量化的C代码-这也有助于隐式回答一些缺少的细节,比如输出格式需要是什么以及如何处理边界条件。浮动和固定点实际上取决于您对精度和速度的重视程度。没有正确的答案。至少显示你想要矢量化的C代码-这也将有助于隐式回答一些缺少的细节,比如输出格式需要是什么以及你想要如何处理边界条件。浮动和固定点实际上取决于您对精度和速度的重视程度。没有正确的答案。