Читайте также:
|
|
Для эффективной выборки из SSE регистров тетрад используется имеющиеся в составе блоков FPU многовходовые байтовые коммутаторы. Эти коммутаторы позволяют осуществлять пересылки из любого байта источника в любой байт приемника, по индексам находящемся в специальном индексном SSE регистре. Причем параллельно выполняется пересылка для всех 16 байт SSE регистра- приемника.
Имея узлы хранения подстановок на SSE регистрах и многовходовый коммутатор в блоках FPU можно организовать следующее преобразование в блоке подстановок:
В этой схеме входной регистр в каждой тетраде задает адрес для соответствующего коммутатора, который по шине данных передает из накопителей узлов замены информацию в выходной регистр.
Такую схему можно организовать тремя способами:
- Создать соответствующий дизайн чипа, но это для нас «фантастика».
- Перепрограммировать микрокод и создать собственную процессорную команду для реализации этой функции на существующих процессорах, - это уже не «фантастика», но к сожалению, не реально в нынешних условиях.
- Написать программу на официальных командах AVX, вариант пускай и не очень эффективный, но зато осуществим «здесь и сейчас». Поэтому этим и займемся далее.
Работой коммутаторов управляет специальная трехадресная команда AVX VPSHUFB. Первый операнд которой является приемником информации из коммутаторов, второй операнд является источником, к которому подключены входы коммутаторов, а третий операнд является управляющим регистром для коммутаторов, каждый байт которого ассоциирован с соответствующим коммутатором и значение в нем задает номер направления с которого коммутатор считывает информацию. Вот описание этой команды из официальной документации фирмы Интел:
А вот схема работы этой команды, - изображена только половина SSE регистров, для второй половины все аналогично:
Коммутатор использует только младшие четыре бита для определения направления коммутации, последний бит в каждом байте используется для принудительного обнуления соответствующего байта приемника, но эта функция коммутатора в нашем случае пока не востребована.
Программа с выборкой тетрад через коммутаторы FPU было написана, но я даже не стал ее помещать в приложение, – слишком убого. Иметь регистр размером 128 бит и использовать в нем только 32бита,- не профессионально.
Как говорится: «Наш финиш горизонт», поэтому выжимать, так выжимать,…. будем прессовать и складывать в пакеты…
Это не игра слов, а суровая FPUшная реальность, регистры SSE можно разбивать на равные части и выполнять над этими частями одинаковые преобразования одной командой. Для того чтобы процессор это понял, имеется магическая буковка «Р» - пакет, которая ставится перед мнемоникой команды и не менее магические буковки «Q», «D», «W», «B» которые ставятся в конце и объявляют на какие части разбиты в этой команде регистры SSE.
Нас интересует пакетный режим с разбивкой SSE регистра на четыре 32битных блока, соответственно все команды будут иметь сначала префикс «P» а в конце символ «D». Это дает возможность одной процессорной командой параллельно обрабатывать сразу четыре блока по 32 бита, т.е. в параллель рассчитывать четыре блока данных.
Программа реализующая этот метод имеется в приложении №3, там же все пояснения, если кто либо заинтересуется в подробностях.
Но прессовать, так прессовать, в современных процессорах имеется как минимум два блока FPU и для их полной загрузки можно использовать два потока независимых команд. Если грамотно чередовать команды из независимых потоков, то можно загрузить работой оба блока FPU полностью и получить сразу восемь параллельно обрабатываемых потоков данных.
Такая программка была написана и ее можно посмотреть в приложении №4, только смотреть осторожно, можно слететь с катушек, это что называется «код не для всех…..»
Дата добавления: 2015-07-08; просмотров: 193 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Использование SSE регистров и AVX команд современных процессоров для реализации ГОСТ 28147-89 | | | Цена вопроса |