我需要运行一个计算量很大的程序。因此,性能是我首先关心的问题。似乎有很多关于 CPU 的细节应该考虑在内。如硬件预取、缓存、分支预测、流水线等。如何获得有关此主题的全面信息?
谢谢。
我需要运行一个计算量很大的程序。因此,性能是我首先关心的问题。似乎有很多关于 CPU 的细节应该考虑在内。如硬件预取、缓存、分支预测、流水线等。如何获得有关此主题的全面信息?
谢谢。
首先要学习的也是最重要的一点是:不要试图猜测为什么您的程序可能会很慢。让它工作,然后测试它以找出答案。当然,有些事情可能是个问题,但是真实数据集上的真实代码常常会让你大吃一惊。你真的无法提前知道瓶颈在哪里,所以学习使用像 Valgrind 这样的分析工具来测量你的实际代码并从那里开始。
我确实理解您在创建可能需要解决典型计算机体系结构情况的应用程序时的担忧。在此之前,我建议您阅读一本有关计算机体系结构的书,以便您可以全面了解之前接触应用程序的内容和方法。
让我同样建议你一本书>> http://www.amazon.com/Computer-Organization-Architecture-Stallings-Communications/dp/013293633X
希望我有所帮助。
你应该知道计算机编程并且你应该非常了解它。编写干净的代码,对其进行分析,找到瓶颈并更新代码。很可能编译器已经为您提供了大量优化选项,请阅读其文档。而且我相信现在的编译器比大多数程序员做得更好。
当您获得所有这些并且仍然缺少性能时,您可以阅读以下内容:
一个好的优化编译器已经知道“硬件预取、缓存、分支预测、管道”等所有细节。你需要告诉编译器你的目标是什么特定的 CPU。对于 gcc,使用-march
and-mtune
选项作为起点。
尝试不同clang
的编译器,例如英特尔 C 编译器。
使用各种输入数据分析您的程序,并确定瓶颈在哪里,然后研究如何为瓶颈编写更快的代码。与针对特定瓶颈调整汇编代码相比,使用更智能的算法几乎总能获得更多收益。