这是我的问题的简单 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/