【发布时间】:2014-07-04 13:53:10
【问题描述】:
我正在做一些缓存性能测量,我需要在计时之前确保缓存中没有“有用”数据。
假设 L3 缓存为 10MB,是否足以创建一个 10M/4 = 2,500,000 个浮点数的向量,遍历整个该向量,对数字求和,然后清空整个缓存中的任何数据遍历向量?
【问题讨论】:
-
如果你想清除缓存,只要拉一堆与你的测试数据无关的数据就可以了。
-
@Mysticial 嘿 Mystical,我的 vector
想法得到你的认可了吗? 2,500,000 够不够?由于缓存集关联性,我不确定。 -
是的,只是
memset()任何大的连续内存块。一些处理器具有散列的 L3 缓存。因此,由于冲突,一块与缓存大小完全相同的连续内存可能会不够用。但我会说拉几百 MB 就足够了。 -
问题和答案都是关于L3缓存的,但是题目问的是L1/L2/L3。您应该知道,L1 和有时 L2 缓存是每个内核,通过清除 L3 缓存,如果您的程序切换内核,您仍然可能会遇到问题。
标签: c++ performance caching cpu cpu-architecture