【问题标题】:Do popular CPUs / CPU instruction sets support strided data access?流行的 CPU / CPU 指令集是否支持跨步数据访问?
【发布时间】:2014-01-28 16:51:23
【问题描述】:

假设我有两个结构数组(结构具有相同的类型、大小、字段偏移等),并且我想将第一个数组中所有结构的第一个字段复制到结构的第一个字段在第二个数组中。

现代 Intel、AMD、ARM 和其他 CPU 是否支持此类操作,而不是通过对每个相应结构对的一系列加载和存储指令?

如果答案是“是”,那么目标结构具有相同类型、大小和字段的情况(即源数据跨度与目标数据跨度不同时)呢?数据步幅,但两者都是已知的)?

【问题讨论】:

    标签: performance cpu memcpy stride


    【解决方案1】:

    没有特殊的跨步加载/存储指令,但硬件预取机制会检测跨步访问并在检测到模式后开始自动预取(并假设有空闲带宽)。

    【讨论】:

    • 好吧,如果我的数组有一百万个元素长,我仍然需要循环超过一百万个元素。乱序执行和预取可能对我有一些帮助,但也只有这么多。
    • AVX-512 对 scatter/gather 的支持可能允许对其进行矢量化,但加载/存储端口数仍会限制吞吐量。如果 AoS 可以重铸为数组结构而不干扰普通操作,那么这样的复制就很简单了;但大概 OP 已经知道了。
    猜你喜欢
    • 2011-09-01
    • 2021-08-31
    • 2011-07-11
    • 2020-09-12
    • 2012-10-08
    • 1970-01-01
    • 2018-04-19
    • 2020-07-03
    • 2015-01-10
    相关资源
    最近更新 更多