【发布时间】:2016-03-16 00:38:07
【问题描述】:
是否有 AVX 指令能够从带有增量的常规对齐向量中加载四个双精度值?因此,如果我想要像 _mm256_load_pd(a) 这样的调用,增量为 4,因此不会加载值 a[0]、a[1]、a[2] 和 a[3],而是加载 a[0]、a[4]、@ 987654328@和a[12]?
【问题讨论】:
-
您正在寻找一个收集负载。它们存在于 Haswell 中,但它们太慢了,使用标量加载 + 洗牌要快得多。
-
你能给我这种类型的负载的内在函数吗?我没有 Haswell,它的 IvyBrdige(不是 AVX2?)。
-
见保罗的回答。 Ivy Bridge 只有 AVX。它没有收集指令。但让我重申一下,你真的不想想要使用它们。至少对于当前这一代处理器来说不是。
-
是的,我明白这一点。我的意思是标量负载。因为我只找到读取 4 个值的负载,例如 load_pd 和在负载中的标量,它同时存储在所有四个寄存器中,而不仅仅是第一个。
-
您能否描述更多您正在尝试做的事情?我的意思是,例如,如果您阅读 0,4,8,12,然后阅读 1,5,9,13,...您可以这样做,例如转置。
标签: x86 vectorization simd avx