Да, и restrict тоже бывает эффективен для векторизации простых циклов, но все методики просто не поместятся в одну статью. Все зависит от интереса к теме у аудитории.
Да, Вы правы, но в современных процессорах *a и *u инструкции работают практически одинаково, это избавляет от необходимости делать 2 ветви кода, да и компилятор может неявно вставить *u, вместо *a интринсика.
Ну да, это минус ассемблера, под каждый набор инструкций и даже иногда под микроархитектуру код нужен свой. Но опять же, это если код прям супер критичный типа Фурье или gzip сжатия или с ограничениями по размеру. А так, в большинстве случаев, даже у нас, в x86 performance ориентированой библиотеке используются интринсики в последнее время. Те 10% производительности от ассемблера, зачастую не стоят затрат на разработку и главное поддержку в будущем, но за некоторыми исключениями.
Если важен каждый процент производительности, то все таки на ассемблере, можно попробовать потягаться с компиляторм — спланировать код по переходам, спаривать инструкции по исполнительным юнитам, выравнивать их по адресу в памяти, расставлять префечи, раскручивать циклы, вычислять на lea, использовать минимальные по длине инструкции и т.д. Это очень кропотливая работа, но если речь идет о коде для крупных заказчиков, то имеет смысл использовать асм. Но если перфоманс не настолько критичен, как время на разработку и компилятор при этом сообщает, что векторизовал написанный код, то можно оставлять и на С, А еще можно грамотно прагмы компилятора использовать для оптимизации.
Хорошо, и статья про экспертную систему это отлично. Еще бы с обзором, что может экспертная система. К примеру, интересует задача автоматической SSE векторизации С кода. Интерфейса тут минимум, и как раз символьные данные на входе и выходе.
Напишите, если не сложно конкретный сеанс работы. Как скачать, установить, скомпилировать, запустить простейшую программу уровня hello,world на prolog.
я боюсь насчет использования в коммерческих целях вопрос вне моей компетенции, но
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 не заложено описание микроархитектуры.
Это верно. Но хотелось бы добавить, что количество инструкций на сегодняшний день и в AVX2 уже довольно велико, а когда будет AVX512 оно будет еще больше. И уже вообще сложно понять, где можно эффективно применить ту или иную инструкцию. Вот к примеру, понятно что раз в avx512 регистры в два раза шире то и данных за одну итерацию можно обработать в два раза больше. А вот маски можно применять в другом аспекте, как и рассказано в статье.
Ну что тут сказать. Да, в десктопных вариантах планируются лишь микроархитектурные изменения. Но вот когда выйдет серверный вариант с поддержкой AVX-512, то надо чтобы и ПО использовало эти инструкции. Я надеюсь эта статья и поможет разработать такой avx-512 код, причем с масками, это действительно очень эффективный инструмент.
Наверно, Ivan_83, имел в виду побитовый сдвиг, а данные инструкции сдвигают байты, и реализовать побитный сдвиг регистра как единого уже есть некие сложности
>>Увы, но прирост не вседа удаётся получить от перехода на SSE/AVX. :(
Да, действительно такая ситуация бывает, но тут следует подумать, а поддается ли данный алгоритм векторизации или нет? Если нет, то значит нет, но иногда после долгих размышлений удается все-таки получить прирост посредством алгоритмической оптимизации или эффективного использования кэша, памяти или даже за счет большего количества вычислений, если эта тема интересна, то я мог бы поделиться такими примерами.
>>А в новом AVX уже можно работать сразу со всем регистром как с единым?
>>Те не как с пачкой 8/16/32/64 битных, а как с 128/256/512 битным, например сдвигать, >>складывать, вычитать?
я понимаю о чем речь, и да, такие бы инструкции побитового сдвига, сложения были бы востребованы, но мне об их наличии неизвестно
Да, и restrict тоже бывает эффективен для векторизации простых циклов, но все методики просто не поместятся в одну статью. Все зависит от интереса к теме у аудитории.
Да, запуск предполагается в штатных условиях и это обучающая статья, для знакомства с кэшем, в том числе с non-temporal инструкциями.
Да, Вы правы, но в современных процессорах *a и *u инструкции работают практически одинаково, это избавляет от необходимости делать 2 ветви кода, да и компилятор может неявно вставить *u, вместо *a интринсика.
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 не заложено описание микроархитектуры.
Да, действительно такая ситуация бывает, но тут следует подумать, а поддается ли данный алгоритм векторизации или нет? Если нет, то значит нет, но иногда после долгих размышлений удается все-таки получить прирост посредством алгоритмической оптимизации или эффективного использования кэша, памяти или даже за счет большего количества вычислений, если эта тема интересна, то я мог бы поделиться такими примерами.
>>А в новом AVX уже можно работать сразу со всем регистром как с единым?
>>Те не как с пачкой 8/16/32/64 битных, а как с 128/256/512 битным, например сдвигать, >>складывать, вычитать?
я понимаю о чем речь, и да, такие бы инструкции побитового сдвига, сложения были бы востребованы, но мне об их наличии неизвестно