【问题标题】:SSE: why, technically, is 16-aligned data faster to move?SSE:从技术上讲,为什么 16 对齐的数据移动得更快?
【发布时间】:2014-09-17 18:36:42
【问题描述】:

这是总线架构问题吗?在 i7 中是如何规避的?

我知道this,我只是不认为它回答了真正的为什么

【问题讨论】:

  • 我很好奇.downvote 和标记为重复 - 我与自己相关的问题。正如下面的讨论(我希望)所示,除了那里接受的答案之外,还有很多话要说。
  • 您是否阅读了已接受答案中的 cmets,尤其是最后一个?
  • 我仔细阅读了它。我知道有些人接受“硬件设计涉及妥协”作为答案 - 但我不明白为什么要否决一个旨在深入挖掘的问题。我希望了解这里采取的具体妥协,而不是将其作为一般的“这是一个权衡的事情”。
  • 嗯,这个问题不仅是(可能的)重复,而且它也是一个“太宽泛”(这是一个大主题)和离题(SO问题)的候选者应该是关于您面临的特定编程相关问题,而不是关于例如计算机体系结构的一般性讨论)。试试谷歌或一些关于内存架构等基础知识的一般性阅读,如果你有一个特定编程相关的问题,然后回来问它。请参阅:stackoverflow.com/help/on-topic,了解有关提出热点问题的详细信息。

标签: sse simd memory-alignment


【解决方案1】:

处理器是为处理特定大小和对齐方式的数据而构建的。当您使用超出这些大小和对齐方式的数据时,您实际上需要将其转换为对齐、裁剪、使用常规指令对其进行计算,然后将其移回原位。

【讨论】:

  • 处理器是如何设计用于特定对齐的?登记处不在乎他从哪里得到数据。对其进行操作的 ALU 也不会。
  • @OfekShilon 寄存器和 ALU 对对齐一无所知。关心的是内存子系统。对齐更快的原因仅仅是因为它更难为未对齐而构建。例如,未对齐的加载可能会覆盖两个缓存行,因此您需要同时获取两个缓存行,然后提取出您想要的部分并将它们移动/混合在一起。
  • @Mystical - 谢谢,我怀疑这些问题。那么为什么在非对齐地址处获取内存更难呢?由于某种原因,系统总线是否仅限于获取对齐的地址?它是内存控制器的东西吗?可能是缓存关联性(地址“别名”)实现中的某些东西吗?
猜你喜欢
  • 1970-01-01
  • 2016-03-23
  • 2011-02-12
  • 1970-01-01
  • 2016-01-26
  • 2013-06-25
  • 1970-01-01
  • 2015-01-12
相关资源
最近更新 更多