我有一些简单的测试代码,我试图生成AVX优化代码,用于在Linux Redhat 5.6上使用icc v12.1.代码如下所示:
int main() {
double sum = 0.0;
for (unsigned int i = 0; i < 1024; i++) {
sum += static_cast<double>(i);
}
std::cout << "Sum: "<< sum << std::endl;
return 0;
}
我用它编译它(并且矢量报告说循环被矢量化):
icc -xavx -vec-report1 main.cpp
当我运行代码时,我收到以下错误:
Fatal Error: This program was not built to run in your system.
Please verify that both the operating system and the processor support Intel(R) AVX.
我确信该处理器具有AVX功能,但是其他人是否在Redhat 5.6上遇到AVX问题?
解决方法:
Red Hat Enterprise Linux 5.x系列使用2.6.18的基本Linux内核版本.最重要的是,Red Hat向后端内核版本反向选择了补丁和新功能
因为它认为在释放家庭的一生中是合适的.因此,虽然内核基于2.6.18,但您可能会看到一些仅在以后的主线内核版本中出现的其他功能.
话虽如此,Linux内核在版本2.6.30(reference)之前不支持AVX,所以看起来这不是Red Hat向5.x系列后移的功能之一.根据波特兰集团(编译器制造商)论坛上的this post,直到版本6.2(CentOS基本上等同于RHEL)才出现全面支持.