У меня есть оптимизированное для AVX приложение, которое мне не нужно делать совместимым с не AVX-процессорами. Тем не менее, я хотел бы показать чистый диалог ошибок на этих старых процессорах, вместо того, чтобы сбой приложения, так как это вызывает путаницу у клиента.C++ app crashing on non AVX CPUs
В моем main()
Я создаю экземпляр QApplication
(я использую каркас Qt), а затем тестирую AVX, используя gcc __builtin_cpu_supports ("avx")
. Если это не удается, отображается диалоговое окно с ошибкой. Это доказало свою работу над процессорами без AVX в простом тестовом приложении.
Однако наше (большое) приложение аварийно завершает работу перед отображением диалогового окна на процессорах без AVX.
Я подозревал:
- глобальной переменной инициализации где-то, который использует AVX встроенные функции. Я не уверен на 100% проверять везде, но, похоже, это не так.
- gcc optimizer использует инструкции AVX для некоторого кода, вызываемого перед проверкой.
Проблема в том, что для отладки у меня нет системы без AVX, и я предпочел бы избежать покупки, если это возможно.
- Возможно ли отключить AVX при отладке на моем процессоре, чтобы отладчик остановился на любой инструкции AVX?
- Любые альтернативные идеи?
Почему бы не запускать 'простое тестовое приложение' всегда, и если все нормально, тогда' простое тестовое приложение' запустит 'главное сложное приложение'? – fghj
Уже обсуждался на этом форуме (https://software.intel.com/en-us/forums/intel-isa-extensions/topic/508413). [Intel Software Development Emulator] (http://software.intel.com/en-us/articles/intel-software-development-emulator). –
Получаете ли вы 'SIGILL', и можете ли вы установить для этого обработчик? –