【问题标题】:How to Store multiple 5-element structures from five registers in assembly of armv8/aarch64/arm64?如何在 armv8/aarch64/arm64 的汇编中存储来自五个寄​​存器的多个 5 元素结构?
【发布时间】:2019-01-13 23:56:05
【问题描述】:

现在,我有五个 128 位 SIMD 寄存器:

v0: p0  p1  p2  p3  p4  p5  p6  p7
v1: p8  p9  p10 p11 p12 p13 p14 p15
v2: p16 p17 p18 p19 p20 p21 p22 p23
v3: p24 p25 p26 p27 p28 p29 p30 p31
v4: p32 p33 p34 p35 p36 p37 p38 p39

其中 pn 是像素值。我想将这些数据存储到内存中,存储形式为“p0 p8 p16 p24 p32 p1 p9 p17 p25 p33 p2 p10 p18 p26 p34 p3 p11 p19 p27 p35 p4 p12 p20 p28 p36 p5 p13 p21 p29 p37 p6 p14 p22 p30 p38 p7 p15 p23 p31 p39”。

此要求类似于st4。但是没有“st5”指令。

我该怎么做?任何人都可以帮助我吗?谢谢你。

【问题讨论】:

  • 这需要多高效?显然,如果性能无关紧要,这很容易。您是否尝试过在寄存器中进行转置,然后进行 8 个重叠的未对齐存储? (所以你覆盖了前一个商店的最后 3 个元素)。重叠未对齐向量存储在 x86 上相当有效,但 IDK 如果 AArch64 微架构在将它们吸收到存储缓冲区中同样有效。当然,转置需要多次洗牌。
  • 这对性能很重要。

标签: assembly simd arm64 armv8


【解决方案1】:

st4 指令可以完成您的用例的工作,但由于您有 5 个寄存器,它不适用于您的用例。但是,st4 指令将元素一一存储,并不是所有 4 个寄存器的一个通道同时存储。因此,您可以重新排列您选择的要存储的元素,并为您的用例使用 strst1 变体。

【讨论】:

    猜你喜欢
    • 2014-03-02
    • 2022-01-02
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-11
    • 2014-04-06
    相关资源
    最近更新 更多