如何使用矢量类对 C++ 代码进行矢量化
How to vectorize c++ code using vector classes
我对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;
}
取自 这里
那么av
、bv
和cv
是分别指向a
、b
和c
的F32vec4
类型的指针呢?
此外,如何访问cv
元素并将其存储回常规浮点变量?
一般来说,
你不想访问cv
的单个元素,如果你这样做,你只会使用c
。也就是说,这是可能的。 F32vec4
实际上只是一个包装器,__m128
它是架构多媒体寄存器的内在变量类型。设置/获取这些寄存器的各个元素不是好的做法,因为这将是一个串行操作,并且违背了向量操作的目的。如果确实必须这样做,F32vec4
的 [] 运算符是重载的;这会将内部寄存器强制转换为浮点数数组,并从/向数组的特定元素加载/存储一个元素。
相关文章:
- 普通环路未使用gcc 4.8.5自动矢量化
- 阵列火矢量化
- 使用矢量化c++的矩阵乘法
- 循环中标量乘积的自动矢量化
- 如何在clang++中禁用矢量化
- 加权外积的矢量化
- 手动矢量化/SSE 用于 C++ 中的复杂问题
- 包含比较的循环的自动矢量化
- pcl_ros::transformPointCloud的矢量化
- 迭代卡拉苏巴算法在C++中使用OpenACC并行化和矢量化
- (如何)我可以使用openmp矢量化"std::complex<double>"吗?
- C 矩阵乘法自动矢量化
- 矢量化 :乘以_m256i元素
- 是否可以使用 SSE 对此嵌套进行矢量化?
- 为什么内联函数中的循环无法正确自动矢量化
- 是否保证 OpenMP 矢量化
- AVX,SSE总和比gcc自动矢量化慢
- 嵌套矢量化 OpenMP 循环,在最内层循环中具有多行代码
- 我可以只对代码的一部分启用矢量化吗
- 如何使用矢量类对 C++ 代码进行矢量化