[C/C++\] 想把算法提速十几倍可以这样做

技术讨论 ML_worker ⋅ 于 5个月前 ⋅ 922 阅读
来源:原创 于仕琪 于仕琪

C/C++编程语言一个优势是程序的效率,这对于计算量大的人工智能算法尤为重要。如果你能够将程序效率提升10倍,那意味着程序可以用1/10的时间完成任务,也意味着算法可以部署到非常低价的嵌入式系统上。


要想程序跑得快,可以依次做如下事情。

1. 利用编译器的优化选项

编译的时候gcc/g++等编译器使用“-O3”选项,Visual Studio请在项目属性页面里:项目->属性->配置属性->C/C++->优化->优化:使速度最大化(/O2)。

另外,切勿在Debug模式下评估速度(gcc/g+的“-g” “-ggdb”选项,VS的Debug模式),因为Debug生成的程序有大量的Debug指令。


2. 利用SIMD指令

SIMD的全称是Single Instruction Multiple Data,是由CPU支持的加速指令。Intel CPU的有MMX、SSE、AVX2、AVX512等,ARM CPU是NEON指令,RISC-V CPU是RVV。各种平台的差异很大,我曾写过文章介绍过OpenCV提供的统一指令:使用OpenCV中的universal intrinsics为算法提速 (1)使用OpenCV中的universal intrinsics为算法提速 (2)使用OpenCV中的universal intrinsics为算法提速 (3)


3. OpenMP多核并行

前面介绍的SIMD指令只是应用到一个CPU内核上,要让多个CPU内核都忙起来,可以使用OpenMP。用法很简单,如下图,for循环就并行了。但要注意数据冲突的问题。

#include <omp.h>

file
关于上面提到的这些技巧,是于教授在南方科技大学的本科生课程“C/C++程序设计”有详细的介绍。感兴趣的可以在B站观看课程视频(点击下方链接进入学习)。

观看链接:提示:此内容登录后可查看


相关推荐:
训练提速 60%!只需 5 行代码,PyTorch 1.6 即将原生支持自动混合精度训练
PyTorch 提速四倍!提高 DALI 利用率,创建基于 CPU 的 Pipeline
1000 倍提速!伯克利提出新的数据增强策略训练方法,更好更快扩充数据

成为第一个点赞的人吧 :bowtie:
回复数量: 0
暂无回复~
您需要登陆以后才能留下评论!