VC++ 2015 отключить AVX для x64
От: Ruzzz  
Дата: 23.01.17 20:29
Оценка:
Возможно ли отключить генерацию AVX(2) кода оставив только SSE(N) в VC++ 2015?
vc++ vc++2015
Re: VC++ 2015 отключить AVX для x64
От: kov_serg Россия  
Дата: 24.01.17 00:34
Оценка:
Здравствуйте, Ruzzz, Вы писали:

R>Возможно ли отключить генерацию AVX(2) кода оставив только SSE(N) в VC++ 2015?

Я думал что её надо специально включать ключом /arch:AVX2.
А тут такой подарок. Давно пора, только новое и модное, ибо нефиг. Покупайте новое железо.
Ждёмс когда же уже результат не будет пускаться на win7 и на процессорах старше 2лет.
Может стоит задуматься об использованием других компиляторов.
Re[2]: VC++ 2015 отключить AVX для x64
От: Ruzzz  
Дата: 24.01.17 02:55
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>Здравствуйте, Ruzzz, Вы писали:


R>>Возможно ли отключить генерацию AVX(2) кода оставив только SSE(N) в VC++ 2015?

_>Я думал что её надо специально включать ключом /arch:AVX2.
_>А тут такой подарок. Давно пора, только новое и модное, ибо нефиг. Покупайте новое железо.
_>Ждёмс когда же уже результат не будет пускаться на win7 и на процессорах старше 2лет.
_>Может стоит задуматься об использованием других компиляторов.

Мля нашел, к проекту подключено несколько статических lib.
И одну я сам же когда-то скомпилировал с ключом /arch:AVX
Просто кинул старые lib'ы не проверив.

Либы все скомпилированы с /mt ключом
На старом компе Unhandled exception at ...: 0xC000001D: Illegal Instruction.
Нахожу внутри вызова:
Код одной из библиотек lib ->
  std::basic_ostream<...>::operator<<(int) ->
    std::num_put<...>::do_put(std::ostreambuf_iterator<...>, std::ios_base&, char, long)

Инструкцию vmovups xmm0, xmmword ptr [r8]
Проверяю и перекомпилирую эту lib без /arch:AVX
В этом же месте и сгенерированный ASM и IDA показывает: movups xmm0, xmmword ptr [r8]
Включаю генерацию ASM для exe проекта, везде movups
А в результате в exe опять vmovups
Оказалось что одна из lib была /mt /arch:AVX

Жаль что компоновщик не умеет подсказывать в этой ситуации.
Интересно на основе чего он делает вывод кукую версию использовать?
Знает ли он что там код с AVX?
Re[3]: VC++ 2015 отключить AVX для x64
От: _NN_ www.nemerleweb.com
Дата: 24.01.17 07:05
Оценка:
Здравствуйте, Ruzzz, Вы писали:

R>Жаль что компоновщик не умеет подсказывать в этой ситуации.

Я вот собираю 64-битную lib , меняю заголовок на x86 и подсовываю в сборку.
Получаю 64-битный код в бинарнике 32-бит

R>Интересно на основе чего он делает вывод кукую версию использовать?

Какую указываем, такую и используем.
Нужно собрать несколько разных версий и придумать наименования.
А потом на основе флагов компиляции выбирать нужное имя.
К примеру как делается в Boost: http://www.boost.org/doc/libs/1_56_0/boost/config/auto_link.hpp

R>Знает ли он что там код с AVX?

Ему всё равно что там внутри.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[4]: VC++ 2015 отключить AVX для x64
От: kov_serg Россия  
Дата: 24.01.17 09:04
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>Здравствуйте, Ruzzz, Вы писали:


R>>Интересно на основе чего он делает вывод кукую версию использовать?

_NN>Какую указываем, такую и используем.
_NN>Нужно собрать несколько разных версий и придумать наименования.
_NN>А потом на основе флагов компиляции выбирать нужное имя.
_NN>К примеру как делается в Boost: http://www.boost.org/doc/libs/1_56_0/boost/config/auto_link.hpp
Это очень удобно когда у вас постоянно растёт количество архитектур
libX-i386
libX-i686
libX-x86-SSE2
libX-x86-SSE4
libX-x86-AVX
libX-x86-AVX2
libX-AMD64-FMA
libX-AMD64-SSE4
libX-AMD64-AVX
libX-AMD64-AVX2
libX-AMD64-AVX512
libX-IA64
libX-ARMthumb
libX-ARM
libX-ARMv7
libX-ARMhf
libX-ARM64
libX-MIPS
libX-MIPS64
libX-SHA
libX-PPC
libX-PPC64
...
И собирать дольше и либы здоровее (занимают уже не гигабайты а десятки гиг)
Ах да забыл
libX-(OSes)*(CPU_ARCHes)*(COMPILERER_VERSIONs)*(RELEASE|DEBUG)

R>>Знает ли он что там код с AVX?

_NN>Ему всё равно что там внутри.
Особенно удобно с динамическим либами.
Отредактировано 24.01.2017 9:06 kov_serg . Предыдущая версия .
Re[5]: VC++ 2015 отключить AVX для x64
От: _NN_ www.nemerleweb.com
Дата: 24.01.17 09:29
Оценка:
Здравствуйте, kov_serg, Вы писали:

R>>>Интересно на основе чего он делает вывод кукую версию использовать?

_NN>>Какую указываем, такую и используем.
_NN>>Нужно собрать несколько разных версий и придумать наименования.
_NN>>А потом на основе флагов компиляции выбирать нужное имя.
_NN>>К примеру как делается в Boost: http://www.boost.org/doc/libs/1_56_0/boost/config/auto_link.hpp
_>Это очень удобно когда у вас постоянно растёт количество архитектур
Это плата за компиляцию заранее.

Переходите на платформы с JIT компиляцией.
Или храните промежуточный код и транслируйте уже на конечной машине
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[6]: VC++ 2015 отключить AVX для x64
От: kov_serg Россия  
Дата: 24.01.17 12:05
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>Здравствуйте, kov_serg, Вы писали:


R>>>>Интересно на основе чего он делает вывод кукую версию использовать?

_NN>>>Какую указываем, такую и используем.
_NN>>>Нужно собрать несколько разных версий и придумать наименования.
_NN>>>А потом на основе флагов компиляции выбирать нужное имя.
_NN>>>К примеру как делается в Boost: http://www.boost.org/doc/libs/1_56_0/boost/config/auto_link.hpp
_>>Это очень удобно когда у вас постоянно растёт количество архитектур
_NN>Это плата за компиляцию заранее.
Это не плата это не желание замечать проблему.

_NN>Переходите на платформы с JIT компиляцией.

На java приходится платить за высокий уровень абстракций. Размеры war файлов просто доставляют.
_NN>Или храните промежуточный код и транслируйте уже на конечной машине
Еще интерпретируемые скрипты есть. Пиковая вычислительная мощность в большинстве задач не требуется.
Re[2]: VC++ 2015 отключить AVX для x64
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 24.01.17 17:14
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>Здравствуйте, Ruzzz, Вы писали:


R>>Возможно ли отключить генерацию AVX(2) кода оставив только SSE(N) в VC++ 2015?

_>Я думал что её надо специально включать ключом /arch:AVX2.
_>А тут такой подарок. Давно пора, только новое и модное, ибо нефиг. Покупайте новое железо.

У меня на новом лаптопе процессор 4405U из линии Skylake, но AVX в нём нет. Так что новизна не поможет.
The God is real, unless declared integer.
Re[3]: VC++ 2015 отключить AVX для x64
От: kov_serg Россия  
Дата: 24.01.17 18:58
Оценка:
Здравствуйте, netch80, Вы писали:

N>Здравствуйте, kov_serg, Вы писали:


_>>Здравствуйте, Ruzzz, Вы писали:


R>>>Возможно ли отключить генерацию AVX(2) кода оставив только SSE(N) в VC++ 2015?

_>>Я думал что её надо специально включать ключом /arch:AVX2.
_>>А тут такой подарок. Давно пора, только новое и модное, ибо нефиг. Покупайте новое железо.

N>У меня на новом лаптопе процессор 4405U из линии Skylake, но AVX в нём нет. Так что новизна не поможет.

Нет проблем. по мнению маркетологов "выжнедебил" вам срочно надо что-то по новее хотябы древний i7-6950, но "нормальные пацаны" берут E7-8890 v4 иначе комп будет "тупить"

Решение проблемы некоторые видят так https://geektimes.ru/company/icover/blog/269436/
Отредактировано 24.01.2017 19:10 kov_serg . Предыдущая версия .
Re[7]: VC++ 2015 отключить AVX для x64
От: _NN_ www.nemerleweb.com
Дата: 24.01.17 19:50
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>>>Это очень удобно когда у вас постоянно растёт количество архитектур

_NN>>Это плата за компиляцию заранее.
_>Это не плата это не желание замечать проблему.
Именно плата.
Никто не мешает скомпилировать функцию в нужных вариантах и динамически выбирать нужную реализацию, таким образом получая один библиотечный файл.
Или собрать несколько динамических модулей (dll) и выбирать во время выполнения нужную реализацию.
Единственная проблема, что тогда практически мы отказываемся от части оптимизаций компилятора.

В любом случае если нужна совместимость с более старым железом нужно чем-то жертвовать.
http://rsdn.nemerleweb.com
http://nemerleweb.com
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.