Antonio Larrosa 是 KDE 和 openSUSE 开源项目的参与开发者,他一直在开发着一个名为 Bard 的命令行音乐管理器,他写了一篇文章称通过使用 C++17 作为项目提升巨大速度,提升的幅度达到了八千倍之多。如果你正在寻找同样情况的提升速度,那就看看他的心得吧。
特别是,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 音乐管理器项目以了解更多。
优化总结心得如下: 1.花一些时间思考如何优化代码,这件事十分值得开发者去做。 2.如果你使用 C++ 并能够使用现代编译器,那么请使用 C++ 17,它可以让你更有效地编写更好/更优雅的代码。Lambdas、结构化绑定、constexpr 等特性真的值得花时间阅读它们。 3.允许编译器为你做的事情。,它可以对你的代码进行优化而无需你的任何努力。 4.尽可能少地复制/移动数据。这个操作很慢,很多时候只需要在开发之前考虑一下数据结构就可以避免这个操作。 5.尽可能使用线程。 6.最后,可能也是最重要的:量化一切指标。你不能改进你无法量化的东西(技术上你可以,但你肯定不知道)。
相关主题 |