【发布时间】:2017-02-25 16:54:19
【问题描述】:
我有一个 32 字节对齐的结构,其中包含 8 个向量:
struct ALIGN(32) Ray8
{
float x[8];
float y[8];
float z[8];
};
在使用 AVX2 时,我想对这些成员进行一致的操作。我什么时候需要使用 _mm256_load_ps() 显式加载它们而不是强制转换它们?例如,使用以下签名:
void GenerateRayDirections( __m256 * x, _m256 * y, _m256 * z ) { ... }
调用为
void GenerateRayDirections( (__m256*)ray.x, (__m256*)ray.y, (__m256*)ray.z );
我正在使用英特尔的 embree 库,它们有一个 vfloat8 类,它在内部将表示存储为 _m256 和 float8 的联合,因此根本没有强制转换 - 但似乎也没有加载调用。如果我改为嵌入 vfloat8 类:
void GenerateRayDirections( &ray.x.v, &ray.y.v, &ray.z.v );
我正在寻找有关何时加载或投射的指导?
【问题讨论】:
-
当你想要向量时加载到向量,当你想要转换概念时将它们转换,你确定要加载吗?你的汇编代码能证明吗?