AVX debugging или все-таки как?

AVX определен, зафиксирован и уже идет к нам. Ранее много говорилось о разных способах разработки: компиляция, эмуляция, документация и даже профайлинг (очень рекомендую заглянуть сюда /en-us/avx/ ), – но довольно мало было информации по поводу отладки.

Хотя, если сказать честно – все уже было. Но сегодня стало еще удобнее и даже нагляднее отлаживать перемещение битов по 256 битному полю AVX регистров.

В общем, рекомендую ближе познакомиться с SDE (/en-us/articles/intel-software-development-emulator ).

Эмулятор позволяет не только отлично, но и тихо обрабатывать набор всех инструкций, а также показывать, что именно происходило.

Для начала хочу обратить ваше внимание на дополнительный аргумент помощи  - thelp, который раскрывается в довольно длинный набор аргументов, среди которых можно найти и так называемые Debugtrace knobs, где отдельно стоит отметить -debugtrace и -dt_start_int3.

Их использование позволяет нам создать файл отчета debugtrace.out ( имя по умолчанию ), где будут явно видны команды и, главное, их операнды с используемыми значениями.

У меня, например, получается:

TID0: INS 0x00401f4d                     vrcpss xmm7, xmm5, xmm5


TID0:      XMM7 := 00000000_00000000_00000000_3ba57800


XMM7 (doubles) := 0 4.94411e-315


XMM7 (floats)  := 0 0 0 0.00504971


TID0: INS 0x00401f51                     vsubss xmm5, xmm1, xmm0


TID0:      XMM5 := 00000000_00000000_00000000_43460000


XMM5 (doubles) := 0 5.57633e-315


XMM5 (floats)  := 0 0 0 198


TID0: INS 0x00401f55                     vmulss xmm5, xmm5, xmm7


TID0:      XMM5 := 00000000_00000000_00000000_3f7ff5a0


XMM5 (doubles) := 0 5.26353e-315


XMM5 (floats)  := 0 0 0 0.999842



Здесь явно видно, что vmulss ( скалярное умножение с плавающей точкой ) в виде операндов получает

0.00504971 (XMM7) и 198 (XMM5). Результат остается в XMM5 (0.999842), что согласно моему калькулятору является истиной.

Структура debugtrace.out на самом деле довольно проста, и практически сразу, ну или со второго взгляда можно увидеть последние значения используемых регистров или памяти  J.

Для большего удобства советую также обратить внимание на dt_start_int3, который позволяет «окружать» интересный код для более детального разбора уже из SDE.

Я думаю проблем уже нет или ?

Para obter informações mais completas sobre otimizações do compilador, consulte nosso aviso de otimização.