c - 如何找到缓存友好代码中的未命中率?

标签 c caching multidimensional-array

int sumarrayrows(int a[M][N])
{
    int i, j, sum = 0;
    for (i = 0; i < M; i++)
        for (j = 0; j < N; j++)
            sum += a[i][j];
    return sum;
}

我想知道如何找到任何缓存友好代码的未命中率,并测量缓存或缓存 block 的大小(如果是的话)如何找到它的大小。

更新我想出了如何找到错过率

因为这使用了 4 个字节 会有 25% 的机会出现失误 a[0] = M a[1] = H a[2] = H a[3] = H

最佳答案

取决于您的平台。大多数现代 CPU 都有硬件性能计数器,可用于计算缓存未命中次数,但访问这些计数器可能会很困难。例如,Windows 通常希望您编写内核模式驱动程序。

您最好获得一些不错的性能分析软件并通过它运行您的代码。

关于c - 如何找到缓存友好代码中的未命中率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13691334/

相关文章:

python - SWIG:未完全复制或显示字符串?

java - HttpClients PoolingHttpClientConnectionManager 和 DNS 缓存

c - 如何更改 C 中二维数组的内容?

Java for 循环没有正确填充数组

javascript - java脚本填充一个数组,使其匹配以下结构

c 服务器代码 printf

c++ - C 编译 : error: stray '\4' in program ; octal flow?

c - 如何从 C 运行外部程序并解析其输出?

c# - 使用 ASP.NET MVC OutputCache,同时根据用户是否经过身份验证改变 View 内容

c# - 缓存对于 MongoDB 和 MySQL 一样重要吗?