我对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
那么
av
,bv
和cv
是F32vec4
类型的指针,分别指向a
,b
和c
吗?另外,如何访问
cv
元素并将其存储回常规浮点变量中? 最佳答案
通常,您不想访问cv
的单个元素,如果要访问,则只需使用c
。也就是说,这是可能的。 F32vec4
实际上只是__m128
的包装,它是体系结构的多媒体寄存器的固有变量类型。设置/获取这些寄存器的单个元素不是一个好习惯,因为这将是串行操作,并且会破坏向量操作的目的。如果确实需要,F32vec4
的[]运算符将被重载;这会将内部寄存器转换为浮点数组,并从该数组的特定元素加载/存储一个元素。
关于c++ - 如何使用 vector 类向量化C++代码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23377747/