Как стать автором
Обновить
23
-3
Андрей @a_bakshaev

Инженер по разработке ПО

Отправить сообщение

Да, и restrict тоже бывает эффективен для векторизации простых циклов, но все методики просто не поместятся в одну статью. Все зависит от интереса к теме у аудитории.

Да, запуск предполагается в штатных условиях и это обучающая статья, для знакомства с кэшем, в том числе с non-temporal инструкциями.

Да, Вы правы, но в современных процессорах *a и *u инструкции работают практически одинаково, это избавляет от необходимости делать 2 ветви кода, да и компилятор может неявно вставить *u, вместо *a интринсика.

Ну да, это минус ассемблера, под каждый набор инструкций и даже иногда под микроархитектуру код нужен свой. Но опять же, это если код прям супер критичный типа Фурье или gzip сжатия или с ограничениями по размеру. А так, в большинстве случаев, даже у нас, в x86 performance ориентированой библиотеке используются интринсики в последнее время. Те 10% производительности от ассемблера, зачастую не стоят затрат на разработку и главное поддержку в будущем, но за некоторыми исключениями.
Если важен каждый процент производительности, то все таки на ассемблере, можно попробовать потягаться с компиляторм — спланировать код по переходам, спаривать инструкции по исполнительным юнитам, выравнивать их по адресу в памяти, расставлять префечи, раскручивать циклы, вычислять на lea, использовать минимальные по длине инструкции и т.д. Это очень кропотливая работа, но если речь идет о коде для крупных заказчиков, то имеет смысл использовать асм. Но если перфоманс не настолько критичен, как время на разработку и компилятор при этом сообщает, что векторизовал написанный код, то можно оставлять и на С, А еще можно грамотно прагмы компилятора использовать для оптимизации.
Хорошо, и статья про экспертную систему это отлично. Еще бы с обзором, что может экспертная система. К примеру, интересует задача автоматической SSE векторизации С кода. Интерфейса тут минимум, и как раз символьные данные на входе и выходе.
Напишите, если не сложно конкретный сеанс работы. Как скачать, установить, скомпилировать, запустить простейшую программу уровня hello,world на prolog.
А можно использовать IPP и некоторые из гигантов ее и используют.
я боюсь насчет использования в коммерческих целях вопрос вне моей компетенции, но
sde использует другой инструмент — pintool

Intel SDE is built upon the Pin dynamic binary instrumentation system and the XED encoder decoder.


Distribution

Pin is proprietary software developed and supported by Intel and is supplied free of charge for non-commercial use.

Мысль кстати интересная измерять замедление вместо ускорения. Но тем не менее хотя с помощью sde можно исполнить avx512 код, но вот измерить производительность нельзя, поскольку в sde не заложено описание микроархитектуры.
Нет не обязательно. Для отладки AVX512 кода существует инструмент sde. Он позволяет выполнять код, содержащий AVX 512 инструкции.
Это верно. Но хотелось бы добавить, что количество инструкций на сегодняшний день и в AVX2 уже довольно велико, а когда будет AVX512 оно будет еще больше. И уже вообще сложно понять, где можно эффективно применить ту или иную инструкцию. Вот к примеру, понятно что раз в avx512 регистры в два раза шире то и данных за одну итерацию можно обработать в два раза больше. А вот маски можно применять в другом аспекте, как и рассказано в статье.
Ну что тут сказать. Да, в десктопных вариантах планируются лишь микроархитектурные изменения. Но вот когда выйдет серверный вариант с поддержкой AVX-512, то надо чтобы и ПО использовало эти инструкции. Я надеюсь эта статья и поможет разработать такой avx-512 код, причем с масками, это действительно очень эффективный инструмент.
Да, для криптографии было бы полезно иметь такие сдвиги.
Да, Вы правы 16 и 8 бит целых пока нет, но скажем так, вспомните как вышел AVX и AVX2.
Наверно, Ivan_83, имел в виду побитовый сдвиг, а данные инструкции сдвигают байты, и реализовать побитный сдвиг регистра как единого уже есть некие сложности
>>Увы, но прирост не вседа удаётся получить от перехода на SSE/AVX. :(
Да, действительно такая ситуация бывает, но тут следует подумать, а поддается ли данный алгоритм векторизации или нет? Если нет, то значит нет, но иногда после долгих размышлений удается все-таки получить прирост посредством алгоритмической оптимизации или эффективного использования кэша, памяти или даже за счет большего количества вычислений, если эта тема интересна, то я мог бы поделиться такими примерами.
>>А в новом AVX уже можно работать сразу со всем регистром как с единым?
>>Те не как с пачкой 8/16/32/64 битных, а как с 128/256/512 битным, например сдвигать, >>складывать, вычитать?
я понимаю о чем речь, и да, такие бы инструкции побитового сдвига, сложения были бы востребованы, но мне об их наличии неизвестно
спасибо большое за отзыв, учту обязательно.

Информация

В рейтинге
Не участвует
Откуда
Нижний Новгород, Нижегородская обл., Россия
Работает в
Зарегистрирован
Активность