我是SIMD
的新手| , 所以我在理解如何使用 vector 类时遇到了一些麻烦,例如 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
的包装器,__m128
是架构多媒体寄存器的固有变量类型。设置/获取这些寄存器的单个元素不是一个好的做法,因为这将是一个串行操作并且会破坏 vector 操作的目的。如果确实需要,F32vec4
的 [] 运算符会被重载;这会将内部寄存器转换为 float 组,并从/向数组的特定元素加载/存储一个元素。
关于c++ - 如何使用 vector 类对 C++ 代码进行矢量化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23377747/