Я унаследовал некоторый высоко оптимизированный (SSE4), но некомментированный код c. Существуют ли какие-либо инструменты или утилиты, которые преобразуют встроенные функции SSE в более читаемый код или псевдокод? Это было бы в первую очередь для удобочитаемости, чтобы я мог лучше понять код, прежде чем копаться и вносить изменения.
Я не знаю ни одного такого инструмента.
Но это, скорее всего, не очень поможет в любом случае. Если код SSE хорошо оптимизирован, сложная часть, вероятно, не расшифровывает встроенные функции. Трудная часть состоит в том, чтобы следовать всем трюкам, чтобы улучшить локальность и устранить внутри-итерационные зависимости данных (стриминг, преобразования многогранного цикла и т. Д.)
Однако я могу предложить вам следующее: всегда иметь хорошо прокомментированную скалярную версию той же самой подпрограммы, написанную самым простым способом. Этот «ссылочный код» должен заботиться только о читабельности и корректности, а не о скорости … Так что в нем должно быть множество утверждений. Также есть набор тестов, который может использовать как скалярную версию, так и оптимизированные варианты.
Независимо от того, реализуете ли вы подпрограмму впервые или обновляете существующую подпрограмму, всегда начинайте со справочного кода и набора тестов. Необязательно в этом порядке.
Такой подход более дорогой заранее, но намного дешевле в долгосрочной перспективе.
Других решений пока нет …