当前位置: 首页 > news >正文

C/C++代码性能优化技巧的书籍及资料

  使用C/C++开发的场景,大多对代码的执行的速度,实时性有较高的要求,像嵌入式系统的开发,资源还受限。在算力存储空间有限的MCU上写出简洁又高效的代码实际是一种艺术。软件工程师在代码设计上的这种差距,会反映在产品的性能(能用和好用差着十万八千里)和成本(选择配置低更便宜的MCU)上,最终成为产品成败的关键。
  这里插播一段为人津津乐道的故事。Quake-III Arena (雷神之锤3)是90年代的经典游戏,游戏不但画面和内容不错,而且即使计算机配置低,也能极其流畅地运行。这要归功于它3D引擎的开发者约翰-卡马克(John Carmack)。John Carmack编写的一段快速求解平方根的算法,比传统使用标准库函数 sqrt() 来计算的方法快了4倍而且计算非常精确。代码其他部分不重要,其中最让人费解的是那个神奇的数字 0x5f3759df,没人知道他是怎么得到这个数字的。普渡大学的数学家Chris Lomont看了以后觉得有趣,决定研究一下这个魔法数字有什么奥秘。Lomont 也是个神人,潜心研究后得到了一个理论值 0x5f37642f。Lomont 拿自己算出的值和 Carmack 的神奇数字比较,看谁的值能更快更准地求得平方根,结果仍然是 Carmack 赢了。Lomont 忿忿不平,采用暴力法挨个数字试过去,才终于找到一个比 Carmack 要好上那么一点点的数字。后来 Lomont 为此写下一篇论文 Fast Inverse Square Root(论文的链接附上),很多人将 0x5f3759df 称为了神的数字。下面附上大神的代码。

float Q_rsqrt( float number )
{long i;float x2, y;const float threehalfs = 1.5F;x2 = number * 0.5F;y   = number;i   = * ( long * ) &y;   // evil floating point bit level hackingi   = 0x5f3759df - ( i >> 1 ); // what the fuck?y   = * ( float * ) &i;y   = y * ( threehalfs - ( x2 * y * y ) ); // 1st iteration// y   = y * ( threehalfs - ( x2 * y * y ) ); // 2nd iteration, this can be removed#ifndef Q3_VM#ifdef __linux__assert( !isnan(y) ); // bk010122 - FPE?#endif#endifreturn y;
}

英文版《Hacker’s Delight》中文版《算法心得:高效算法的奥秘》

作者是在IBM工作50余年的资深计算机专家Henry S. Warren,曾参与多个军事指挥与控制系统工程。书中总结了大量高效、优雅和奇妙的算法,并从数学角度剖析了其背后的原理。

《C程序性能优化 20个实验与达人技巧》

Software optimization resources

  Agner Fogde应该属于跨学科的复合型人才,他是丹麦进化人类学家和计算机科学家。他目前是丹麦技术大学(DTU)计算机科学副教授,他最出名的是创造了术语“帝王理论(Regality Theory)",并为运行x86架构的机器编写了大量的优化手册。
  链接是他的个人网站能下载到他的书籍。
《Optimizing software in C++》
《Optimizing subroutines in assembly language: An optimization guide for x86 platforms》
《The microarchitecture of Intel, AMD and VIA CPUs: An optimization guide for assembly programmers and compiler makers》
《Instruction tables: Lists of instruction latencies, throughputs and micro-operation breakdowns for Intel, AMD and VIA CPUs》
《Calling conventions for different C++ compilers and operating systems》

世面上讲c++性能优化的书其实不少了,但是很多都停留在架构、算法、数据结构层面,大都是些老生常谈了。而从语言本身、操作系统、硬件层面系统阐述性能优化的技术书则少了很多。而《optimizing software in c++》正是这样的一本书。

Bit Twiddling Hacks

  Bit Twiddling Hacks 的外国网站收集了几乎所有位操作的黑科技玩法,卡内基梅隆大学计算机科学主任,Randal Bryant教授已经用他的Uclid code verification system测试了。你能找到bug奖励你10$。

http://www.lryc.cn/news/504490.html

相关文章:

  • 通俗易懂的 Nginx 反向代理 配置
  • docker设置容器自动启动
  • 蓝桥杯刷题——day1
  • Leetcode 面试150题 399.除法求值
  • 活动预告 |【Part2】Microsoft 安全在线技术公开课:安全性、合规性和身份基础知识
  • Unity游戏实战
  • SQL中的替换函数replace() 使用
  • Python面试常见问题及答案5
  • (css)element中el-select下拉框整体样式修改
  • 点击按钮打开dialog嵌套表格checked数据关闭dialog回显checked数据
  • 《拉依达的嵌入式\驱动面试宝典》—C/CPP基础篇(三)
  • 大模型呼出机器人有哪些优势和劣势?
  • Python鼠标轨迹算法(游戏防检测)
  • 安宝特分享 | AR技术助力医院总院与分院间的远程面诊
  • css中的字体单位
  • 如何使用程序查询域名whois信息?(带PHP/C#示例)
  • 在C#中编程绘制和移动线段
  • web自动化测试框架playwright
  • 【报错记录】Ubuntu22.04解决开机卡在 /dev/sda5 : clean , *files , *blocks
  • 【AIGC】如何高效使用ChatGPT挖掘AI最大潜能?26个Prompt提问秘诀帮你提升300%效率的!
  • 免费生成AI PPT产品推荐?
  • ubuntu22.04 使用crash
  • Linux高性能服务器编程 | 读书笔记 |9.定时器
  • OSG开发笔记(三十九):OSG中模型的透明度实现、球体透明度Demo
  • phpSpider如何处理网页内容的动态加载问题
  • 【Go】-倒排索引的简单实现
  • Python:基于PyCharm的简单程序创建及运行-HelloWorld
  • 设置HP条UI
  • 开源分布式系统追踪-03-CNCF jaeger-02-快速开始
  • 手机实时提取SIM卡打电话的信令声音--社会价值(一、方案解决了什么问题)