5

我在英特尔开发人员手册中找到了这一段:

来自“使用 SSE3、SSSE3、SSE4 和 AESNI 编程”章节

流式加载不得用于引用映射到具有副作用的 I/O 设备的内存地址,或者当对这些设备的读取具有破坏性时。这是因为 MOVNTDQA 本质上是投机性的。

任何人都可以澄清这个问题吗?

我问是因为我正在考虑将一些 SSE 程序集应用于 OpenGL映射缓冲区对象,但我担心那个破坏性的词。这个主题是否适用于映射内存?实际上我不知道 glMapBuffer 调用的背后是什么。

我不认为我的图形卡会被破坏(:),但这个词肯定听起来不太好。

4

1 回答 1

5

这里的破坏性是指只能执行一次的读取,例如当设备提供内存映射方式从其队列中读取下一项时。在这种情况下,第二次从该位置读取将给出第二个结果。这很糟糕,因为 MOVNTDQA 是推测性的,因此即使由于错误预测的分支最终跳过了指令,也可能执行取指。第一次获取的数据将被不可挽回地破坏,但不会对硬件造成实际损害。

由于您只是尝试访问不同设备上的普通 RAM,而不是 MMIO 寄存器,因此您不必担心。

于 2011-11-05T00:20:46.307 回答