【问题标题】:How to vectorize c++ code using vector classes如何使用向量类对 C++ 代码进行向量化
【发布时间】:2014-04-30 00:40:05
【问题描述】:

我是 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

所以avbvcvF32vec4 类型的指针,它们分别指向abc

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

【问题讨论】:

  • 我不确定确切的问题是什么。 avbvcv 是指向 abc 的指针,区别在于我们在这里假设 abc 是指向数组的指针四个浮点数,而 avbvcv 是指向具有单个 F32vec4 的数组的指针。

标签: c++ optimization parallel-processing vectorization sse


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-18
    • 2020-07-14
    • 2017-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多