比方说,例如,我有2个变量__m256i叫做rows和cols,在他们里面的值是:
rows: 0, 2, 7, 5, 7, 2, 3, 0
cols: 1, 2, 7, 5, 7, 2, 2, 6
Run Code Online (Sandbox Code Playgroud)
现在,这些值代表x和y8点的位置,所以,在这种情况下,我将有以下几点:
p0: [0, 1], p1: [2, 2], p2: [7, 7], p3: [5, 5]
p4: [7, 7], p5: [2, 2], p6: [3, 2], p7: [0, 6]
Run Code Online (Sandbox Code Playgroud)
我也有一个名为的数组lut,其值为int:
lut: [0, 1, 2, 3, ..., 60, 61, 62, 63]
Run Code Online (Sandbox Code Playgroud)
我想要做的是,使用这些位置值rows和cols变量,使用lut它访问数组并__m256i使用lut访问的值创建一个新值. …
我有一个包含 32 个值的array调用。Aunsigned char
我想用__m256这个规则将这些值解包到 4 个变量中,假设我们有一个从 0 到 31 的索引,关于 中的所有值A,解包的 4 个变量将具有这些值:
B_0 = A[0], A[4], A[8], A[12], A[16], A[20], A[24], A[28]
B_1 = A[1], A[5], A[9], A[13], A[17], A[21], A[25], A[29]
B_2 = A[2], A[6], A[10], A[14], A[18], A[22], A[26], A[30]
B_3 = A[3], A[7], A[11], A[15], A[19], A[23], A[27], A[31]
Run Code Online (Sandbox Code Playgroud)
为此,我有以下代码:
const auto mask = _mm256_set1_epi32( 0x000000FF );
...
const auto A_values = _mm256_i32gather_epi32(reinterpret_cast<const int*>(A.data(), A_positions.values_, 4);
// …Run Code Online (Sandbox Code Playgroud)