看一名 KDE 开发者如何使用 C++17 为项目提升巨大速度
参与 KDE 和 openSUSE 开发的开源项目开发者 Antonio Larrosa 一直在独立开发着一个名为 Bard 的命令行音乐管理器。他还写了一篇有趣的帖子来讲述他如何将这个软件中一些操作的速度提升了大约八千倍。
特别是,Antonio 专注于加速在用户的本地音乐收藏中寻找歌曲/音乐副本的过程。最初的代码通过 Python 实现,后来变成了经过优化的 C++ 代码。令人惊讶的是,优化调整过的 C++ 代码要比 Python 快得多 —— 如果你希望了解作者为实现这个结果所做出的调整,以及所采取的各种步骤带来的影响,不妨看看作者所写的博客。
他没有用 C++ 重写整个程序,而是使用了 Boost.Python 库,该库使得 C++ 和 Python 代码之间可进行无缝的操作。从这时开始,Antonio 开始编写相关的 C++ 代码。特别是,他专注于 C++ 17 并使用了线程。进一步提升性能的操作是调整 C++ 的编译器标记(compiler flags),并将 GCC 从 7.3 版本切换到 8.1 版本。
长话短说,“作者的最后一次代码提交也最后一次提升了速度,达到 7998 倍 —— 36680首/秒(对比速度),并可在13秒内完全处理完一个1000首歌曲的音乐集。”有关更详细具体的技术细节请查看作者原博客,也可以访问他的 Bard 音乐管理器项目以了解更多。
最后作者也就这次优化总结了一些心得:
花一些时间思考如何优化代码 —— 这件事十分值得开发者去做
如果你使用 C++ 并能够使用现代编译器,那么请使用 C++ 17,它可以让你更有效地编写更好/更优雅的代码。Lambdas、结构化绑定、constexpr 等特性真的值得花时间阅读它们
允许编译器为你做的事情。,它可以对你的代码进行优化而无需你的任何努力
尽可能少地复制/移动数据。这个操作很慢,很多时候只需要在开发之前考虑一下数据结构就可以避免这个操作
尽可能使用线程
最后,可能也是最重要的:量化一切指标。你不能改进你无法量化的东西(嗯,技术上你可以,但你肯定不知道)
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Python 之父宣布退出决策层,Python 该何去何从?
Python 创始人Guido van Rossum 昨日在邮件列表宣布,他将完全脱离决策层,不再领导该语言,给自己一个永久的假期。后续会作为一个普通的核心开发者,待在那里一段时间。 从 Guido van Rossum 的邮件内容可以看出,他已经厌倦了运营该组织。他在邮件开头写道,“我不想再为 PEP(Python 改进提案)[PEP 572]进行如此艰难的斗争,并发现有这么多人鄙视我的决定”。此外,Guido van Rossum 也提醒大家他已不再年轻,这件事情早晚会发生。 Guido van Rossum 明确表示不会任命继任者,Python 的未来从此将由 Python 的核心开发者来决定。目前需要解决的问题是,后续要如何确定 PEP 以及如何引入新的核心开发者。 Guido van Rossum 提醒核心开发者,CoC(Python 社区行为准则)仍然存在。他补充道,“如果你不喜欢那个文档,你唯一的选择可能就是主动离开这个群体。“
- 下一篇
SUSE 开发者提议在 GCC 编译器中用 Python 替代 AWK
日前,一位 SUSE 开发者向GCC 开发团队发送了一封邮件,希望允许在 GCC 编译器代码库中使用一门脚本语言(Python),这主要是为了替代现有的 AWK 语言。 这位 SUSE 开发者 Martin Liška 目前正在寻求关于这项提议的可能性,他表示,这不是将现有的 GCC C 编译器代码替换为脚本语言或类似的任何东西,而是旨在替换当前难以维护的 AWK 脚本语言。 Martin Liška 认为,GCC 中的 AWK 代码现在“对进行任何调整都非常不愉快”,因此 Martin 在观察是否有足够多的上游开发者更愿意看到允许 Python 取代它。而该项提案可能由 GCC 指导委员会负责。 Martin 提到的关于 AWK 的一些问题 gcc/optc-save-gen.awk 充满了复制粘贴的代码,而由于缺少标志类型类(flags type classes),导致创建了多个全局变量(var_opt_char, var_opt_string, ...) 类似的事情发生在gcc/opth-gen.awk 我们做了很多正则表达式匹配工作(主要在 gcc/opt-functions....
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Red5直播服务器,属于Java语言的直播服务器
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS关闭SELinux安全模块
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7