带增量的AVX加载指令



是否有AVX指令能够从一个规则的、以增量对齐的向量中加载四个双值?所以,如果我想要一个像_mm256_load_pd(a)这样的增量为4的调用,那么不是加载值a[0]a[1]a[2]a[3],而是加载a[0]a[4]a[8]a[12]

如果您有AVX2(Haswell及更高版本),则可以使用收集的负载,例如_mm256_i32gather_pd。来自Intel Intrnsics指南:

简介

__m256d _mm256_i32gather_pd (double const* base_addr, __m128i vindex, const int scale)

#include "immintrin.h"

说明:vgatherdpd ymm, vm64x, ymm

CPUID标志:AVX2

说明

使用32位索引从内存中收集双精度(64位)浮点元素。64位元素从base_addr开始的地址加载,并偏移vindex中的每个32位元素(每个索引按比例因子缩放)。聚集的元素被合并到dst中。刻度应为1、2、4或8。

正如在评论中已经指出的,在Haswell上收集的负载很慢,但如果您需要这种访问模式来进行后续的256位SIMD操作,那么它们可能仍然是值得的。不过,由于您使用的是double,因此任何好处都可能很小,因此您可能还想针对传统的标量实现进行基准测试。

最新更新