一些与计算机架构相关的问题缓存性能

问题描述

有关 X5650 处理器的详细信息,请访问 https://www.cpu-world.com/CPUs/Xeon/Intel-Xeon%20X5650%20-%20AT80614004320AD%20(BX80614X5650).html

重要说明: L3缓存大小:12288KB 缓存线大小:64

考虑以下两个函数,它们都将数组中的值增加 100。

void incrementVector1(INT4* v,int n) {
                       for (int k = 0; k < 100; ++k) {
                           for (int i = 0; i < n; ++i) {
                               v[i] = v[i] + 1;
} }
}
                   void incrementVector2(INT4* v,int n) {
                       for (int i = 0; i < n; ++i) {
                           for (int k = 0; k < 100; ++k) {
                               v[i] = v[i] + 1;
} }
}

使用 perf 实用程序收集的以下数据捕获用于执行的运行时信息 英特尔至强 X5650 处理器上的每一个功能都适用于各种数据大小。在该数据中: • 程序vector1.bin 执行函数incrementVector1; • 程序vector2.bin 执行函数incrementVector2; • 程序采用一个命令行参数来设置 n 的值; • 两个程序首先分配一个大小为n 的数组并将所有元素初始化为0。 • LLC-loads 表示“最后一级缓存加载”,即访问L3 的次数; • LLC-load-misses 表示“最后一级缓存未命中”,即 L3 缓存未命中数。 vector1.bin 的运行时性能。 './vector1.bin 1000000' 的性能计数器统计信息: 230,070 LLC 负载 3,280 LLC-load-misses # 所有 LL-cache 引用的 1.43% 0.383542737 秒时间过去 './vector1.bin 3000000' 的性能计数器统计信息: 669,884 LLC 负载 242,876 次 LLC-load-misses # 所有 LL-cache 引用的 36.26% 1.156663301 秒时间过去 './vector1.bin 5000000' 的性能计数器统计信息: 1,234,031 LLC 负载 898,577 LLC-load-misses # 所有 LL-cache 引用的 72.82% 1.941832434 秒时间过去 './vector1.bin 7000000' 的性能计数器统计信息: 1,620,026 LLC 负载 1,142,275 LLC-load-misses # 所有 LL-cache 引用的 70.51% 2.621428714 秒时间过去 './vector1.bin 9000000' 的性能计数器统计信息: 2,068,028 LLC 负载 1,422,269 LLC-load-misses # 68.77% 的所有 LL-cache 引用 3.308037628 秒时间过去 8 vector2.bin 的运行时性能。 './vector2.bin 1000000' 的性能计数器统计信息: 16,464 LLC 负载 1,168 LLC-load-misses # 所有 LL-cache 引用的 7.049% 0.319311959 秒时间过去 './vector2.bin 3000000' 的性能计数器统计信息: 42,052 LLC 负载 17,027 LLC-load-misses # 40.49% 的所有 LL-cache 引用 0.954854798 秒时间过去 './vector2.bin 5000000' 的性能计数器统计信息: 63,991 LLC 负载 38,459 LLC-load-misses # 60.10% 的所有 LL-cache 引用 1.593526338 秒时间过去 './vector2.bin 7000000' 的性能计数器统计信息: 99,773 LLC 负载 56,481 LLC-load-misses # 所有 LL-cache 引用的 56.61% 2.198810471 秒时间过去 './vector2.bin 9000000' 的性能计数器统计信息: 120,456 LLC 负载 76,951 LLC-load-misses # 63.88% 的所有 LL-cache 引用 2.772653964 秒时间过去

我有两个问题:

  1. 考虑 vector1.bin 的缓存未命中率。在向量大小 1000000 和 5000000 之间,缓存未命中率急剧增加。缓存未命中率增加的原因是什么?
  2. 考虑两个程序的缓存未命中率。请注意,对于任何特定的数组大小,两个程序之间的未命中率大致相等。这是为什么?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)