gpt4 book ai didi

c++ - 如何测量读取/周期或指令/周期?

转载 作者:太空宇宙 更新时间:2023-11-04 02:10:06 29 4
gpt4 key购买 nike

我想彻底测量和调整我的 C/C++ 代码,以便在 x86_64 系统上更好地使用缓存。我知道如何使用计数器(我的 Windows 机器上的 QueryPerformanceCounter)来测量时间,但我想知道如何测量每个周期的指令或每个周期相对于工作集的读/写。

我应该如何衡量这些值(value)?

最佳答案

现代处理器(即那些使用时间不超过 20 年且不受限制的处理器)是超标量的,即它们一次执行多条指令(给定正确的指令顺序)。最新的 x86 处理器将 CISC 指令翻译成内部 RISC 指令,重新排序并执行结果,甚至有多个寄存器组,因此可以并行执行使用“相同寄存器”的指令。今天没有任何合理的方法来定义“指令执行所花费的时间”。

当前的 CPU 比内存快很多(访问内存的典型成本是几百条指令),它们都严重依赖缓存来提高性能。然后你会看到各种有趣的内核共享(或不共享)缓存部分的效果,......

为获得最佳性能而调优代码从软件架构开始,接着是程序组织、算法和数据结构选择(这里少量的缓存/虚拟内存意识也很有用)、仔细的编程和(作为最极端的措施来挤出最后 2% 的性能)像你提到的那些(和另一个最喜欢的,“在汇编中重写”)的考虑。之所以这样排序,是因为第一层以相同的成本提供更高的性能。 测量 在深入挖掘之前,程序员众所周知在发现瓶颈方面不可靠。并考虑为性能重组代码的成本,包括工作本身、说服自己这个复杂的代码是正确的,以及维护。考虑到计算机和人员的相对成本,极端的性能调优几乎没有任何意义(也许对于流行操作系统中大量运行的代码路径,编译器生成的通用代码路径,但几乎没有其他地方)。

关于c++ - 如何测量读取/周期或指令/周期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15322066/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com