首先,这是真的,对吧?我觉得读取总是比写入快,这里的这个人也做了一些实验来“证明”它。他没有解释原因,只是提到了“缓存问题”。(而且他的实验似乎并不担心预取)
但我不明白为什么。如果重要的话,让我们假设我们谈论的是 Nehalem 架构(如 i7),它为每个内核提供 L1、L2 缓存,然后是共享的包容性 L3 缓存。
可能这是因为我没有正确理解读写是如何工作的,所以我会写下我的理解。请告诉我是否有问题。
If I read some memory, following steps should happen: (assume all cache misses)
1. Check if already in L1 cache, miss
2. Check if in L2 cache, miss
3. Check if in L3 cache, miss
4. Fetch from memory into (L1?) cache
Run Code Online (Sandbox Code Playgroud)
不确定最后一步。数据是否会渗透到缓存中,这意味着在缓存未命中的情况下,内存首先被读入 L3/L2/L1,然后从那里读取?或者它可以“绕过”所有缓存,然后缓存并行发生以备后用。(读取 = 访问所有缓存 + 从 RAM 获取到缓存 + 从缓存读取?)
Then write:
1. All caches have to be checked (read) in this case too
2. If …Run Code Online (Sandbox Code Playgroud)