我对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
和{{1}分别是?
此外,如何访问c
元素并将其存储回常规浮点变量?
答案 0 :(得分:0)
一般来说,您不想访问cv
的单个元素,如果您这样做,则只需使用c
。那说,有可能。 F32vec4
实际上只是__m128
的包装器,它是架构多媒体寄存器的内部变量类型。设置/获取这些寄存器的各个元素并不是一个好习惯,因为这将是一个串行操作并且无法实现向量操作的目的。如果你真的需要,F32vec4
的[]运算符会超载;这会将内部寄存器强制转换为浮点数组,并从/向数组的特定元素加载/存储一个元素。