进程跳核时是否刷新L1缓存?

Is L1 cache flushed when a process jumps core?

一个程序应该总是读回它之前写的东西,即使是最宽松的一致性。假设一个程序在 core1 上 运行 并在写入和后续读取之间移动到另一个 core2,OS 和内存子系统的职责是什么以确保读取 returns 之前写入的内容?

OS 必须确保程序可见的所有 CPU 状态都正确保存并在上下文切换时恢复。

所以理论上L1一定要flush。
然而在实践中,这取决于平台,例如 x86 架构强制执行 cache coherency with the MESI,因此每个 CPU 在其缓存中共享内存的一致图像,并且不会刷新 L1 缓存。
然而其他类型的缓存必须被刷新,例如TLBs