gpt4 book ai didi

windows - 当我们测量函数的性能时,如何清空缓存

转载 作者:可可西里 更新时间:2023-11-01 10:40:10 25 4
gpt4 key购买 nike

CPU 缓存总是会中断我们测试某些代码的性能。

gettime();
func1();
gettime();

gettime();
func2();
gettime();
// func2 is faster because of the cache.(or page faults of func1())
// But we often misunderstand.

当您衡量代码性能时,如何消除缓存的影响。

我正在寻找一些在 Windows 中执行此操作的功能或方法。
请给我你的好建议。谢谢。

最佳答案

您可以做的一件事是调用一个具有大量代码的函数,并在对您正在分析的项目的调用之间访问大量内存。例如,在伪代码中(主要是语言中立的):

// loop some number of times
{
//start timing
profile_func();
//stop timing
//add to total time
large_func(); // Uses lots of memory and has lots of code
}
// Compute time of profile func by dividing number of iterations by total time

large_func() 中的代码可以是无意义的代码,就像一些重复的操作集超过。关键是它或其代码在编译时没有得到优化,因此它实际上清除了 CPU 的代码和数据缓存(以及 L2 和 L3(如果存在)缓存)。

对于很多情况来说,这是一个非常重要的测试。它之所以重要,是因为经常单独分析的小型快速函数可以运行得非常快,利用 CPU 缓存、内联和注册。但是,通常情况下,在大型应用程序中,由于调用这些快速函数的上下文,这些优势并不存在。

例如,仅通过在紧密循环中运行一百万次迭代来分析一个函数,可能会显示该函数的执行时间为 50 纳秒。然后你使用我上面展示的框架运行它,突然间它的运行时间可以急剧增加到微秒,因为它不能再利用它拥有整个处理器的事实 - 它的寄存器和缓存,对自己来说。

关于windows - 当我们测量函数的性能时,如何清空缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4059125/

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