c - 数组操作向量化期间的分段错误
问题描述
我有一个长度为 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, (short*)avxres, 8*sizeof(short));
两者都在编译时出现分段错误。GCC是用来编译的。这是什么原因呢?有什么方法可以矢量化它吗?
解决方案
推荐阅读
- android - Android Q - ubuntu16.04 上的 VTS 环境设置
- java - java中的SocketTimeOut异常,同时调用RestTemplate GetforObject
- vba - 使用 vba 从服务器存储和检索文件
- excel - 为什么这 2 个 smilar 宏中只有一个可以创建边框?
- pascal - 每当单击特定按钮时,它都会在 Pascal 中执行某些操作
- excel - 为什么在一个单元格的一部分中更改颜色或粗体不再起作用?
- r - 如何用R生成非常高维的空间相关随机场
- php - 在 WordPress 中从我的数据库中检索数据的问题
- python - 如何按最大数字对数组进行排序
- java - 这个数组发生了什么?