- 主题:avx512指令集不能随便启用吗?
我的一个程序,win11下,vc2022编译,启用avx512就报异常:
xxx位置引发的异常: 0xC000001D: Illegal Instruction。
另一台电脑,win10,vc2019,也是同样的问题。
别的增强指令集,avx、avx2等都没有问题。
avx512指令集对代码编写有啥特殊要求吗?(不考虑性能,只考虑能不能正常运行)
--
修改:capriccio FROM 123.113.109.*
FROM 123.113.109.*
i3-10105T,i7-7700hq,应该支持吧。
我之前写了一个简单的程序测试avx512对速度的提升,是可以运行的,速度确实能提高。
【 在 haha103 的大作中提到: 】
: 你的cpu支持avx512么?
--
FROM 123.113.109.*
确实。
不过avx512的程序也能运行。
但实在不知道我这个程序为什么就不行。
既然不支持就不纠结了,老实用avx2好了。
【 在 ziqin 的大作中提到: 】
: Intel ark查一下
: 都不支持,都只支持到avx2
--
FROM 123.113.109.*
vc编译的啊。
当然我并不知道vc编译的程序是否有你说的这种机制
【 在 ziqin 的大作中提到: 】
: 你怎么知道是avx512的程序?
: 如果程序是intel自己的编译器编译的,它会在一个exe里存好几个版本,运行的时候自动探测运行机的cpu配置,然后加载对应的版本。所以可能看起来编译的时候加了avx512的flag,但是运行起来并没有用这个版本
--
FROM 123.113.109.*
avx512的编译选项
【 在 haha103 的大作中提到: 】
: 你是开了avx512的编译选项还是写了avx512相关的intrinsic代码?还是手撸了汇编?
--
FROM 123.113.109.*
int main()
{
int n = 8;//n=1时正常,n>1时报异常
//complex<double> b[8];//b在栈上正常运行
auto b=new complex<double>[n];//b在堆上报异常
vector<double> y(n);
for (int i = 0; i < n; ++i)
{
b[i] = i;
y[i] = i;
}
complex<double> out = 0;
for (int i = 0; i < n; ++i)
{
out += b[i] * y[i];
}
printf("%g, %g\n", out.real(), out.imag());
return 0;
}
另外,如果b为double数组而不是complex<double>,则能正常运行
虽然cpu不支持avx512,但也不应该异常吧,毕竟其它各种情况都是能正常运行的。
【 在 capriccio 的大作中提到: 】
: 我的一个程序,win11下,vc2022编译,启用avx512就报异常:
: xxx位置引发的异常: 0xC000001D: Illegal Instruction。
: 另一台电脑,win10,vc2019,也是同样的问题。
: ...................
--
修改:capriccio FROM 123.113.109.*
FROM 123.113.109.*
vc的编译选项,和代码没关系。但这些代码开了avx512的选项就报异常
【 在 liuzhi 的大作中提到: 】
: 你这里边没一行跟avx有半点关系
--
FROM 123.113.109.*
似乎开启avx512后用到的xmm(n)寄存器不同,开启后出现了n>=16,
avx2时,就最多到xmm15。
【 在 z16166 的大作中提到: 】
: 简单啊,看看xxx这个位置的指令是啥:
: xxx位置引发的异常: 0xC000001D: Illegal Instruction。
--
FROM 111.193.237.*