c++ - 如何使用 vector 类对 C++ 代码进行矢量化

标签 c++ optimization parallel-processing vectorization sse

我是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 , 和 cvF32vec4 类型的指针指向a , b , 和 c ,分别?

此外,cv 的元素如何访问并存储回常规浮点变量?

最佳答案

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

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

相关文章:

c# - 并行 C# 线程性能问题

python - 如何使用循环或并行计算将大数据输入python pandas?

c++ - 在匿名命名空间中定义模板特化(和编译错误 C2888)

c++ - 有没有办法找出输入是否从文件流式传输到程序中?

optimization - 使用-fast编译时,波特兰组FORTRAN pgf90程序失败,-fast -Mnounroll成功时,

java - 正则表达式优化 - 在 Java 中转义&符号

r - 对于不同的 Redis 服务器构建,doRedis 在 Windows 8 x64 中返回错误

c++ - 实现自定义的类 STL 数据结构

c++ - 哪个 STL 容器用于具有基于 key 的访问的有序数据?

python - 使用生成器作为 sorted() 的输入而不是列表理解是否值得