我对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类型的指针,分别指向abc吗?

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

最佳答案

通常,您不想访问cv的单个元素,如果要访问,则只需使用c。也就是说,这是可能的。 F32vec4实际上只是__m128的包装,它是体系结构的多媒体寄存器的固有变量类型。设置/获取这些寄存器的单个元素不是一个好习惯,因为这将是串行操作,并且会破坏向量操作的目的。如果确实需要,F32vec4的[]运算符将被重载;这会将内部寄存器转换为浮点数组,并从该数组的特定元素加载/存储一个元素。

关于c++ - 如何使用 vector 类向量化C++代码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23377747/

10-12 19:43