【发布时间】:2016-07-28 11:21:25
【问题描述】:
我正在尝试通过使用 AVX 内在函数来优化一些代码。编译了一个非常简单的测试用例,但告诉我我的循环没有向量化,原因有很多我不明白。
这是完整的程序,simple.c
#include <math.h>
#include <stdlib.h>
#include <assert.h>
#include <immintrin.h>
int main(void)
{
__m256 * x = (__m256 *) calloc(1024,sizeof(__m256));
for (int j=0;j<32;j++)
x[j] = _mm256_set1_ps(1.);
return(0);
}
这是命令行: gcc simple.c -O1 -fopenmp -ffast-math -lm -mavx2 -ftree-vectorize -fopt-info-vec-missed
这是输出:
- simple.c:11:3:注意:未矢量化:不支持的数据类型
- simple.c:11:3:注意:无法确定矢量化因子。
- simple.c:6:5:注意:未矢量化:基本块中的数据引用不足。
- simple.c:11:3:注意:未矢量化:基本块中的数据引用不足。
- simple.c:6:5:注意:未矢量化:基本块中的数据引用不足。
- simple.c:6:5:注意:未矢量化:基本块中的数据引用不足。
我有 gcc 5.4 版。
谁能帮我解释这些信息并了解发生了什么?
【问题讨论】:
标签: c vectorization avx2