问题描述
考虑
__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 (将#修改为@)