Привет всем знатокам VS
!
При сборке в VS 2013 у всех проектов параметр Enhanced Instruction Set в конфигурации 64 бита не был выставлен как "устанавлен по умолчанию". Причина: SSE и SSE2 — не поддерживался, т.к., естественно, данный набор инструкций поддерживался всеми 64 битными процами, а AVX не мог быть использован на некоторых серверных Xeon-ах у наших заказчиков (SSE 4.2 — максимум). Тем не менее, значение "по умолчанию" приводило к компиляции без AVX.
После перехода на VS 2017 и установке последних обновлений было обнаружено, что также обновился MS Build на всех машинах, который затронул сборку проектов от VS 2013. Проблема: теперь при сборке проектов под VS 2013 и VS 2017 не выставленное значение параметра Enhanced Instruction Set для 64 бит (по умолчанию) означает использовать набор инструкций AVX. Флаги SSE и SSE2 64-х битным компилятором не поддерживаются (соответственно получаем Illegal Instruction).
На отдельной билд-машине проблем нет. Но не удобно работать разработчикам у которых сразу стоит и VS 2013 и VS 2017. Что-то можно сделать в данной ситуации, или без отдельной системы с VS 2013 теперь никак ?
Здравствуйте, AndrewJD, Вы писали:
AJD>Это же вроде пофиксили в 15.7 Preview 4.
Вполне возможно, но сейчас у меня 15.9.16 и проблема присутствует. Последние сборки наших продуктов, в которых все ОК, датируются 17.07.2019. После этого что-то изменилось в конфигурациях MS Build и код стал компилироваться под AVX. Наш код и настройки проектов централизованы и точно не менялись. Пока точнее, что происходит, сказать не могу, т.к., все выглядит как мистика какая-то
.
В любом случае, буду очень признателен, если кто-то поможет понять в чем дело или как заставить 64-битный компилятор (под VS 2013 или VS 2017) не использовать AVX Instruction Set.
P.S. AVX используется даже в сборках с выключенной оптимизацией. (версия VS 2013 — 12.0.40639.0 Update 5)