是否有任何此类处理器具有绕过特定数据缓存的指令? This question也有一个答案,表明SSE4.2指令绕过了缓存。有人可以启发我吗?
答案 0 :(得分:6)
通常,缓存策略由内存管理单元(MMU)控制。对于每个地址范围,决定缓存策略。这些表由操作系统管理,可在系统空间中使用。 作为您可能要提出的问题的侧边栏答案,对于具有缓存的体系结构,通常有CPU命令可用于同步/无效/刷新缓存。但是,与MMU表一样,这些命令也仅在系统空间中可用。
答案 1 :(得分:2)
Altera Nios II架构有两条特定指令ldio
和stio
用于绕过缓存的加载/存储。它们用于内存映射IO。
http://www.csun.edu/~glaw/ee525/Lecture03Nios.pdf
Nios II是一种通常用于Altera FPGA板的软处理器,虽然它也可以获得硬ASIC设备的许可,但我不知道任何基于这种架构的商用CPU
答案 2 :(得分:2)
SSE缓存旁路存储指令是为了避免在写入很快再次触及的区域时污染缓存。例如你不想驱逐将再次使用的数据。
此外,当写入高速缓存行的任何部分时,x86实现通常在整个高速缓存行中读取。如果不需要高速缓存行的先前内容,则这浪费了存储器带宽。 (例如dest
或memcpy
的{{1}} arg。)我发现此回写(默认)与写入合并some old discussion reading from USWC regions / memset
/ movntq
)实施movntdq
的效果。如果其他东西会立即读取memcpy
的输出,请小心使用它。
流式传输加载仅适用于AVX-512,因为正常memcpy
在这种情况下表现可怕。正常的流加载(WB(写回))目前并不特殊,并且像常规memcpy
一样工作。 (即忽略NT提示)。英特尔的优化手册说,您可以使用movdqa
来减少污染负荷。
IDK,如果可以在不触发读取的情况下写入缓存(而不是绕过prefetchnta
)。可能AVX512将解决movnt
的这个问题,因为512b ZMM寄存器是64字节,即完整的高速缓存行。从ZMM寄存器到尚未缓存的内存的64字节对齐存储可以以不首先读取RAM的方式实现,并且仍然使存储可见马上到系统中的其他CPU核心。
(Skylake Xeon将在Knight's Landing(而不是其他skylake CPU)。同样在context-processors,大规模并行高吞吐量Xeon Phi计算加速器的事情。)
答案 3 :(得分:1)
根据您对特定数据的定义,是的。处理器通常具有高速缓存控制寄存器/表,用于定义哪些内存区域可以被高速缓存而哪些区域不能被高速缓存。通常,在用户空间中运行的代码无法访问这些表。
答案 4 :(得分:1)
是否有任何此类处理器有指令绕过特定数据的缓存?
SuperH系列(或至少SuperH-2)具有隐式和显式绕过其高速缓冲存储器。这是通过使用存储器地址空间的不同区域而不是通过特殊指令来完成的
通过将地址的前3位设置为001
,您将访问同一地址的 cache-through 镜像,并清除前3位。并且一些区域(如内存映射的I / O寄存器)永远不会被缓存。