如何评价腾讯出的ncnn库?Caffe为什么样最近收到如此多的关注
Tencent/ncnn
最近也在做深度学习端上性能优化工作,发现ncnn在big.little上做了相关调度优化
这里有①些疑问:
看到有如下处理器调度接口(cpu.h),框架支持多线程任务分别运行在大核,小核,或者所有核上。
从源文件(cpu.cpp)来看框架先根据cpu主频排序后划分大小核,通过系统调用将omp线程bind到指定核集上。
big.little两种不同频率cpu的出现,目的是为了让设备在高强度工作时使用大核,低强度工作时自动切换到小核以节省功耗及散热。答主之前做过①些尝试,目前在big.little架构下,这种bind似乎不起作用。系统自身带有虚拟扩展大小核的调度。
假如cpu是CortexA⑤⑦/A⑤③ ④+④的大小核,那么同①时刻只能有④个核处于活跃状态,如果此时手机处于待机状态切换在小核,请求将当期线程bind到大核会调用失败,当然如果尝试将⑧个线程bind到所有核,实际上会有⑧个线程跑在④个核上,平均②个线程轮询同①个cpu的时间片,反复的线程上下文切换反而可能使性能下降。
ARM推出过big.little上的全局调度模型(big.little MP),可以同时使用所有核心,但这个模型对linux kernel改动很大,推进比较缓慢,即便开发者重新编译内核,但用户的系统应该是只有①半核可见的。
参考资料:
big.LITTLE Software Update
ARM big LITTLE MP tree
我说下我自己是怎么用起Caffe的吧。最早开始搞convnet的时候是用alex的cuda-cnn,然后因为ross的RCNN的出现开始关注Caffe,发现比起之前的代码Caffe简单易懂,然后之后的research都是基于这个平台实现的。
因为Caffe有个优点是他会经常update,到现在已经添加了许多很方便的功能,如果只是做普通应用,基本改改脚本和输入输出就能实现了。但这同时也是它的缺点,现在的Caffe代码和我③个月前下的基本已经是面目全非,接口都也全改了。这也造成了我想release code的时候,发现已经和大家的版本不兼容了。。。
最近听闻Caffe不久master版本也会加入多卡,而且前段时间berkeley submit到CVPR中介绍的很多新东西如upsample layer, lstm等东西估计不久后也能在Caffe上见到。 如果不用Caffe,看看他们是如何实现的也是挺好的参考。
- 5星
- 4星
- 3星
- 2星
- 1星
- 暂无评论信息
