相关疑难解决方法(0)

什么是最快的步幅-3收集指令序列?

问题:

从内存生成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)

c++ x86 vectorization avx2

13
推荐指数
1
解决办法
753
查看次数

使用4个单独的双倍加载x64 ymm寄存器的有效方法是什么?

加载x64 ymm寄存器的最有效方法是什么?

  1. 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)
  2. 在任何位置都有4次加倍

    i.e. i want to load for example 1, 6, 22, 43
    
    Run Code Online (Sandbox Code Playgroud)

64-bit x86 assembly x86-64 simd

1
推荐指数
1
解决办法
819
查看次数

标签 统计

x86 ×2

64-bit ×1

assembly ×1

avx2 ×1

c++ ×1

simd ×1

vectorization ×1

x86-64 ×1