Может ли Visual Studio сообщить мне количество разливов в регистре SSE2 скомпилированного кода? - PullRequest
6 голосов
/ 29 июля 2011

У меня нет никаких реальных знаний компилятора, и я использовал для ручного кодирования функции SSE2 для выбранных фрагментов кода.Я знаю, как читать сгенерированный машинный код, но в основном не знаю о сумасшедших оптимизациях, которые стали возможными благодаря компиляторам.Вся моя работа выполняется с использованием Visual Studio.

Есть ли способ для Visual Studio сообщить мне счетчик разливов в регистре SSE2 части функции?Причина в том, что мы скоро сможем массово производить SSE2-подобный код (шаблонный), и мы хотели бы, чтобы каждый из них был скомпилирован в машинный код достойного качества.Возможно, мы не можем вручную проверить каждый из них.Я надеюсь получить некоторую гарантию того, что скомпилированный код приемлем и лаконичен.Мне не нужно получать последний кусочек сока.

В качестве альтернативы, есть ли ключевое слово, которое работает как __forceinline, которое заставляет компилятор не проливать какие-либо регистры SSE2, например "__forcenospill"?(Если произойдет разлив, компиляция не удастся, и поэтому я узнаю о проблеме и попытаюсь реорганизовать мой код SSE2.)

Использование существующей векторной библиотеки или блиттера не может быть рассмотрено, потому чтонекоторые из вычислений должны быть тщательно зарегистрированы (6 или более операндов за один шаг в «простой операции» (Примечание № 1); промежуточные значения переводятся в 16-битные или 32-битные на лету и конвертируются обратно и т. д.) Перефразирование его с помощью универсальной векторной библиотеки означало бы удвоение или утроение времени выполнения (уже там, это сделали).

Коммерческие инструменты тоже хороши, я, конечно, могу себе это позволить, учитывая характер проекта.

Если такого инструмента нет, я прибегну к профилированию.Вы можете понизить этот пост, чтобы сообщить мне, что таких вещей не существует.

Спасибо!

(Примечание # 1), это адаптивный алгоритм определения порога.

...