美文网首页
movidius优化心得

movidius优化心得

作者: JustinKo | 来源:发表于2017-06-15 23:01 被阅读0次

    使用movidius进行开发也快一年了,越来越觉得这是款非常强大的芯片,这里记录一下一些性能优化的心得。

    结论

    1)shave上使用CMX内存比DDR速度会快2-3倍

    2)使用汇编优化比单纯的硬件指令可以快几倍

    优化中些常用方法

    1)先在PC端进行代码优化,完成PC版本的结果一致性检查后再放到movidius上去跑。在PC端将代码写成纯C然后保证结果一致、同时注意内存用量的话,移植到movidius上基本都可以一步成功。

    2)做好版本管理,执行优化前优化后运算结果一致性比对。代码优化是一个比较精细的活,稍不注意就可能会导致出错,所以进行代码改动必须时常进行一致性结果验证。我自己一般是会跑离线数据,再将当前结果和上一次结果比对,假如有不一致,就通过版本管理软件检查改动的代码

    3)尽量将算法写成可以按行序进行运算的,这样的话可以将数据通过DMA加载到CMX内存进行处理。这是优化中最有效的一个手段,假如被访问的数据存放在DDR上,访问速度太慢必然会拖累处理器的运算能力

    4)将一些密集运算部分的代码,尽量改写能使用硬件指令的结构。有一些密集运算,可能不能直接使用硬件指令,但是通过缓存、构造中间结果,仍然可以使用硬件指令来加速

    5)尝试使用汇编指令,这是最终极的优化手段,现在还不怎么熟悉这个,以后有机会补上~~

    错误排查

    有时候代码在PC端运行得好好的,运行结果也一致,但是跑到movidius上结果就是不对,这是优化过程中经常会碰到的事,有时候排查起来确实让人抓狂,但是应对起来也是有一些方法的

    1)检查内存用量

     movidius上每个shave的CMX内存容量是有限的,数据空间一般都才60K左右(另外剩余的配置成代码空间),假如shave上一个过程中,占用的内存量超过了配置的数据空间用量,运行起来后就很有可能导致结果异常

    2)检查是否有刷新缓存

      假如shave上对DDR写入了数据,然后再到RT侧去取数据,这个时候就要刷新下缓存,不然的RT侧访问到的数据可能还是先前缓存的旧数据。刚开始使用movidius开发的时候经常碰到这个问题,明明shave上代码没问题,为啥就是没正确的数据输出~~!

    3)使用排除法

    将部分可能代码排除再运行,基本可以定位到有问题的地方

    一些坑

    1)dma操作的时候,假如拷贝的数据长度为0,会直接导致movidius卡死,所以dma操作前一定得判断下拷贝的数据长度是否为0

    2)movidius上一些库的汇编版本和c版本结果不一致,很多时候汇编版本要求传入的数据长度是16的整数倍,不然结果可能异常

    暂时写这么多,后面想到别的再补充~~

    相关文章

      网友评论

          本文标题:movidius优化心得

          本文链接:https://www.haomeiwen.com/subject/fhauqxtx.html