我正在尝试在两种算法之间做出决定。一种将8个字节(两个对齐的4字节单词)写入2个高速缓存行,另一种则会写入3个完整的高速缓存行。
如果CPU仅将更改的8个字节写回内存,则第一种算法使用的内存带宽要少得多:8个字节与192个字节相比。如果CPU写入整个高速缓存行,则128字节和192字节之间的差异不那么显著。
那么,英特尔Xeon CPU如何将数据写回内存呢?你会惊讶地发现在Google上找到一个本应该广为人知的答案是多么困难。
据我理解,写操作进入了存储缓冲区,然后再写入高速缓存。当脏的高速缓存行被逐出缓存时,它们可能才会被写入内存,但英特尔是否跟踪缓存行中哪些部分是脏的,或者只是将整个缓存行倾倒出去呢?我认为他们不会追踪缓存行粒度以下的事情,并且在高速缓存线路被逐出之前,任何东西都不会被写回内存。