[C/C++]想把算法提速十几倍可以这样做
2023-04-18 14:16:21 时间
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>
#pragma omp parallel for
for (size_t i = 0; i < n; i+=8)
{
//...
}
关于上面提到的这些技巧,我在南方科技大学的本科生课程“C/C++程序设计”有详细的介绍。感兴趣的可以在B站观看课程视频(长按下方二维码)。
相关文章
- 谷歌「气球互联网」项目,烧钱9年,难逃关停命运
- 程序员请注意!七个细节暴露了你缺乏经验……
- Forrester:2021年中国IT支出将增长9%
- 天才程序员不为人知的秘密
- 我第一次接私活,就被骗了···
- 阿粉面了好几家大厂之后,总结的一些面试攻略
- 重磅推荐!我在Github上找到一个超级轻量、灵活的SQL工具
- 上午写了一段代码,下午就被开除了...
- Alphabet:2020年第四季度云业务营收达38.3亿美元
- 关于架构师:角色、能力和挑战
- 斯坦福新书《决策算法》发布,全文400多页PDF免费下载!
- GPT-3和AlphaFold 2震撼2020,2021年AI最大看点在哪儿?
- 斑马技术获评IDC MarketScape坚固耐用型移动设备领导者
- 工业互联网的“第一高地”,在哪?
- 中美欧到底谁在AI人工智能的全球竞争中领先
- Facebook的开源进展:700个代码仓库和130万名追随者
- 微软宣布开源可扩展存储引擎 已服役超25年
- 新方向!DeepMind提出人工生命框架,促进智能生物体的出现
- 阿里技术专家:如何成为顶尖架构师?
- 优秀程序员必备以下五点能力,你都掌握了吗?