• 问答
  • 技术
  • 实践
  • 资源
[C/C++\] 想把算法提速十几倍可以这样做
技术讨论
来源:原创 于仕琪 于仕琪

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 倍提速!伯克利提出新的数据增强策略训练方法,更好更快扩充数据

  • 0
  • 0
  • 1286
收藏
暂无评论