声明与SIMD类型结合是否有害?

时间:2015-07-31 08:10:09

标签: c simd intrinsics

我写了一个SIMD包装器。为了简化不同类型的使用,我把它作为一个联盟:

#include <emmintrin.h>

union SIMDType16
{
    __m128 simd_by_float;
    __m128i simd_by_int;
    __m128d simd_by_double;
}

但是,从某些地方我听说英特尔SIMD内部的类型信息与硬件使用有关。那么,我对联合的定义是否会造成潜在的影响?

1 个答案:

答案 0 :(得分:2)

这绝对没问题,当然除非有足够的理由让工会让你陷入麻烦,完全独立于SIMD类型。例如,如果您分配给sims_by_float然后读取simd_by_double,则会调用未定义的行为,并且您的程序可能会崩溃。见C++ Undefined behaviour with unions

由于有内在函数在各种矢量类型之间进行转换(并且不生成代码),我不会使用这种联合,除非有非常非常好的理由这样做。