这是我的问题的简单 View ,我想将浮点值转换为定义的类型v4si(我想使用SIMD操作进行优化。)请帮助将浮点/双精度值转换为定义的类型。

#include<stdio.h>

typedef double v4si __attribute__ ((vector_size (16)));

int main()
{
    double stoptime=36000;
    float x =0.5*stoptime;
    float * temp = &x;
    v4si a = ((v4si)x);   // Error: Incompatible data types
    v4si b;
    v4si *c;
    c = ((v4si*)&temp);   // Copies address of temp,
    b = *(c);
    printf("%f\n" , b);      //    but printing (*c) crashes program
}

最佳答案

您不需要定义自定义SIMD vector 类型(v4si)或乱用类型转换和类型punning-只需在适当的*intrin.h header 中使用提供的intrinsics,例如

#include <xmmintrin.h> // use SSE intrinsics

int main(void)
{
    __m128 v;          // __m128 is the standard SSE vector type for 4 x float
    float x, y, z, w;

    v = _mm_set_ps(x, y, z, w);
                       // use intrinsic to set vector contents to x, y, z, w

    // ...

    return 0;
}

关于c - 错误:在C中强制转换用户定义的数据类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43735339/

10-11 15:13