阵列操作向量化期间的分段错误

问题描述

我有一个长度为32的输入数组,精度为16位。

考虑

__attribute__ ((aligned(32))) short inp[32] = {-1,-2,-3,-4,-5,-6,-7,-8,9,10,11,12,13,14,15,16,-17,-18,-19,-20,-21,-22,-23,-24,25,26,27,28,29,30,31,32};
short res[8];

我必须表演,

res = min(inp(0:7),inp(8:15));

为此,我尝试了以下几项内容

// Method 1
__m256i* avxinp0 = (__m256i*) inp;
__m256i* avxinp1 = (__m256i*) (inp+8);
__m256i avxres = _mm256_min_epi16(*avxinp0,*avxinp1);
memcpy(res,(short*)avxres,8*sizeof(short));

// Method 2
__m256i* avxinp0 = (__m256i*) inp0;
__m256i* avxinp1 = (__m256i*) (inp0+8);
__m256i mem0;
_mm256_store_si256(&mem0,*avxinp1);
__m256i avxres = _mm256_min_epi16(*avxinp0,mem0);
memcpy(res,8*sizeof(short));

两者在编译时都给出了分段错误。 GCC是用来编译的,这是什么原因呢?有什么方法可以向量化它?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)