Инструкция по сбору AVX2

Когда я использую Visual Studio для создания инструкций сбора AVX2 с помощью встроенного компилятора, он не вставляет инструкции VXORPS, чтобы разорвать зависимость между предыдущей инструкцией, которая записывает этот регистр YMM, и сбором.

Однако компилятор Intel делает это, и конечным результатом является заметное улучшение производительности из-за нарушения зависимости от данных.

По причинам, в которые я не хочу вдаваться, я не могу использовать компилятор Intel, поэтому есть ли способ «заставить» Visual Studio вставить эту инструкцию VXORPS?

Я уже пытался создать промежуточный __m256i и вызвать для него VXORPS, но это не сработало.


person rohitsan    schedule 23.10.2015    source источник
comment
Не могли бы вы показать не просто слова, а небольшой код со встроенными функциями?   -  person Z boson    schedule 26.10.2015
comment
Скомпилируйте свою функцию с помощью GCC, используя -mabi=ms, затем преобразовать объектный файл ELF64 в COFF64 и связать его с MSVC. Если вы продолжите использовать MSVC для оптимизации, особенно с AVX/AVX2/FMA, это будет разочаровывать вас снова и снова.   -  person Z boson    schedule 27.10.2015
comment
Вы пытались использовать volatile с этими командами, чтобы компиляция не оптимизировала их?   -  person ChipK    schedule 02.07.2018
comment
Логику сбора можно написать вручную, используя встроенные функции. Некоторое время назад я написал сборную логику для умножения матриц. Если интересно, могу выложить фрагмент.   -  person yadhu    schedule 18.07.2018