如何使用向量类向量化c ++代码

时间:2014-04-30 00:40:05

标签: c++ optimization parallel-processing vectorization sse

我对SIMD很新,所以我在理解如何使用F32vec4这样的矢量类来并行处理数组时遇到了一些麻烦。

如果有人能告诉我这段代码的作用,我真的很感激:

#include "fvec.h"

void add(float *a, float *b, float *c)    
{
    F32vec4 *av=(F32vec4 *) a;
    F32vec4 *bv=(F32vec4 *) b;
    F32vec4 *cv=(F32vec4 *) c;
    *cv=*av + *bv;
}

取自HERE

所以avbvcvF32vec4类型的指针,指向ab和{{1}分别是?

此外,如何访问c元素并将其存储回常规浮点变量?

1 个答案:

答案 0 :(得分:0)

一般来说,您不想访问cv的单个元素,如果您这样做,则只需使用c。那说,有可能。 F32vec4实际上只是__m128的包装器,它是架构多媒体寄存器的内部变量类型。设置/获取这些寄存器的各个元素并不是一个好习惯,因为这将是一个串行操作并且无法实现向量操作的目的。如果你真的需要,F32vec4的[]运算符会超载;这会将内部寄存器强制转换为浮点数组,并从/向数组的特定元素加载/存储一个元素。