我有一个AVX优化的应用程序,我不需要与非AVX CPU兼容。但是,我想在这些较旧的CPU上显示一个干净的错误对话框,而不是让应用程序崩溃,因为这会导致客户混淆。
在我的main()
我创建QApplication
实例(我使用Qt框架),然后使用gcc __builtin_cpu_supports ("avx")
测试AVX。如果失败,我会显示错误对话框。事实证明,这可以在一个简单的测试应用上使用非AVX CPU。
但是,我们的(大型)应用程序在非AVX CPU上显示对话框之前崩溃。
我怀疑:
问题是,我没有非AVX系统正在进行调试,如果可能,我宁愿避免购买。
答案 0 :(得分:1)
您可以创建一个(非优化的)包装器程序来执行功能测试,然后通过友好消息退出或执行您的应用程序。
允许QApplication
构造函数修改传递的参数,因此您需要复制(或者不要在通过exec()
的路径中使用任何Qt。)< / p>
像我这样的东西:
int main(int argc, char **argv)
{
if (__builtin_cpu_supports ("avx")) {
execv("/the/real/program", argv);
perror("exec");
exit 1;
} else {
QApplication app(argc, argv);
QDialog d;
d.show();
return 1;
}
}
答案 1 :(得分:0)
VMWare可以fake the CPUID来宾操作系统,您可以关闭所有AVX位。
但是,这只是骗应用程序:如果它仍然执行该AVX指令,它将不会导致应用程序进入调试器。