gpt4 book ai didi

c - 如何在代码片段中查找 TLB 未命中数?

转载 作者:行者123 更新时间:2023-12-04 04:36:54 25 4
gpt4 key购买 nike

假设页面大小为 1KB,如何计算类似以下代码片段的代码中的 TLB 未命中数:

int i;
int p[1024];
for (i=0; i<1024; i++)
p[i]=0;

除了知道#TLB 未命中数之外,我有兴趣了解能够计算几乎每个给定代码片段中 TLB 未命中数的一般规则。

最佳答案

不可能有任何直接的答案。答案会因处理器而异。首先,TLB(条目数)的大小是不一样的。其次,处理器倾向于使用算法来保留更有值(value)的条目(正如他们认为的那样)并丢弃其他条目。这些算法从未发表过。

除此之外,TLB 的一部分将用于读取指令,某些部分将被操作系统使用。这意味着您无法知道确切的结果。

维基百科提供以下信息:

  • 大小:12 - 4,096 个条目;
  • 命中时间:0.5 - 1 个时钟周期;
  • 未命中惩罚:10 - 100 个时钟周期;
  • 未命中率:0.01 - 1%。

  • 在您的示例中,您将需要 5 个页面的 1024 个 4 字节整数数组,因为您的数组很可能不是对齐的页面边界。一旦在循环中访问每个页面,它就会在 TLB 中占有一席之地。这个初始放置可以被视为 TLB 未命中吗?据我所知,没有明确的答案。有些人可能会回答是,有些人会回答不是。我会回答没有。

    当TLB的大小不足以存储算法所需的所有页面时,这无可争议地称为TLB未命中。在您的情况下,如果 TLB 只有 2 个条目,则将有 3 次未命中。

    关于c - 如何在代码片段中查找 TLB 未命中数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19613697/

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