从内存生成32位元素的stride-3集合的最有效序列是什么?如果内存安排如下:
MEM = R0 G0 B0 R1 G1 B1 R2 G2 B2 R3 G3 B3 ...
Run Code Online (Sandbox Code Playgroud)
我们想获得三个YMM寄存器,其中:
YMM0 = R0 R1 R2 R3 R4 R5 R6 R7
YMM1 = G0 G1 G2 G3 G4 G5 G6 G7
YMM2 = B0 B1 B2 B3 B4 B5 B6 B7
Run Code Online (Sandbox Code Playgroud)
标量C代码就像
template <typename T>
T Process(const T* Input) {
T Result = 0;
for (int i=0; i < 4096; ++i) {
T R = Input[3*i];
T G = Input[3*i+1];
T B …Run Code Online (Sandbox Code Playgroud) 加载x64 ymm寄存器的最有效方法是什么?
4个均匀间隔的双倍,即一组连续的双打
0 1 2 3 4 5 6 7 8 9 10 .. 100
And i want to load for example 0, 10, 20, 30
Run Code Online (Sandbox Code Playgroud)在任何位置都有4次加倍
i.e. i want to load for example 1, 6, 22, 43
Run Code Online (Sandbox Code Playgroud)