首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当我们测量函数的性能时,如何清空缓存

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

Stack Overflow用户
提问于 2010-10-30 22:30:47
回答 2查看 80关注 0票数 2

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

代码语言:javascript
复制
gettime();
func1();
gettime();

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

在测量代码性能时,如何消除缓存的影响。

我正在寻找一些函数或方法来在Windows中做到这一点。

请给我你的小费。谢谢。

EN

回答 2

Stack Overflow用户

发布于 2010-10-30 22:38:02

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

代码语言:javascript
复制
// 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纳秒内执行。然后你使用我上面展示的框架运行它,突然它的运行时间可能会急剧增加到微秒,因为它不能再利用它拥有整个处理器的事实-它的寄存器和缓存。

票数 1
EN

Stack Overflow用户

发布于 2010-10-30 22:37:38

好的代码利用缓存,所以你不能简单地关闭它(你可以,但这些结果将完全无关紧要)。

您需要的是在连续的测试之间清空(或无效)缓存。这里有一些提示:Invalidating the CPU's cache

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4059125

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档