首页 > 解决方案 > 试图理解 _mm256_permute2x128_si256 的英特尔内在指南解释

问题描述

我试图了解 _mm256_permute2x128_si256。是先将寄存器 a 的所有 256 位读入机箱,然后再将寄存器 b 的 256 位读入机箱吗?还是在向量 a 和向量 b 之间交错读取每 32 位?那么哪个向量的哪个 32 位被读取对应于 imm8 中的哪个位以什么顺序以及如何读取?谢谢!

DEFINE SELECT4(src1, src2, control) {
    CASE(control[1:0]) OF
    0:  tmp[127:0] := src1[127:0]
    1:  tmp[127:0] := src1[255:128]
    2:  tmp[127:0] := src2[127:0]
    3:  tmp[127:0] := src2[255:128]
    ESAC
    IF control[3]
        tmp[127:0] := 0
    FI
    RETURN tmp[127:0]
}
dst[127:0] := SELECT4(a[255:0], b[255:0], imm8[3:0])
dst[255:128] := SELECT4(a[255:0], b[255:0], imm8[7:4])
dst[MAX:256] := 0

标签: c++simdavxavx2

解决方案


请参阅此网站,它比英特尔的文档提供更多信息:

https://www.felixcloutier.com/x86/vperm2i128


推荐阅读