Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
GCC C向量扩展:如何将任意对齐数组/指针强制转换为向量类型?_C_Gcc_Vectorization - Fatal编程技术网

GCC C向量扩展:如何将任意对齐数组/指针强制转换为向量类型?

GCC C向量扩展:如何将任意对齐数组/指针强制转换为向量类型?,c,gcc,vectorization,C,Gcc,Vectorization,我不熟悉GCC的向量扩展。我在手册中读到,通过使用强制转换,向量可以向任何类型进行强制转换,也可以从任何类型进行强制转换。然而,我不清楚这是如何实现的,因为显而易见的方法失败了: typedef int8_t s8a __attribute__((aligned (16))); typedef int8_t v16s8 __attribute__ ((vector_size (16))); s8a *x = _mm_malloc(512,16); // Grab some aligned mem

我不熟悉GCC的向量扩展。我在手册中读到,通过使用强制转换,向量可以向任何类型进行强制转换,也可以从任何类型进行强制转换。然而,我不清楚这是如何实现的,因为显而易见的方法失败了:

typedef int8_t s8a __attribute__((aligned (16)));
typedef int8_t v16s8 __attribute__ ((vector_size (16)));
s8a *x = _mm_malloc(512,16); // Grab some aligned mem for my int8s
x[0] = 4; x[2] = 1; x[5] = 7; x[15] = 1; // the rest should be junk
v16s8 y = (v16s8)x; // assign the aligned memory to a vector type
我得到:

vec.c:22:2: error: can't convert value to a vector
  v16s8 y = (v16s8)x;
如何将任意内存位置(已知对齐方式等于或优于向量)强制转换为向量类型


谢谢

x指向的数据未对齐,请使用_-mm_-malloc(大小,对齐)它是否会像任何重新解释类型一样:
v16s8 y=*(v16s8*)(&x)
v16s8 y=*(v16s8*)(&x)编译,但运行时立即崩溃。请尝试
v16s8 y=*(v16s8*)x