Итак,
Сейчас мы собираемся отойти от векторов и поговорить о близком родственнике
векторов, или как вы можете производить, или иметь векторные
вычисления на вашем компьютере сегодня. Итак, на самом деле многое из этого было сделано
Руби Рэйс здесь в Принстоне она добавила много мультимедийных расширений
к HPPA risk архитектуре. Несколько других людей были вовлечены
в это, но при создании ее влияние было достаточно сильным.
Идея в том, что у вас есть длинный регистр, так что если вы делаем, скажем
64 битное сложение, и вы не хотите делать 64 битное
сложение или на самом деле не имеете 64 бита данных, вы можете уменьшить его
наполовину и сделать две 32 битные опреации в одно и тоже время.
Или вы можете на этом же АЛУ попробовать сделать 4 16 битных
Или 8 8-битных операций. Так, это называется SIMD, или
Одна(S) Инструкция(I), Множественные(M) Данные(D), Или короткие SIMD инструкции, потому что
как правило, длинна вектора достаточно короткая,
или мультимедиа расширения. И у вас есть инструкции которые говорят
я хочу сделать два 32 сложения, в одно и тоже время.
Это было популяризовано в x86 как минимум при помощи MMX, которое было первой
реализацией этого. И в некотором роде от этого перешли к
SSE, SSE3, SSE4 и сейчас Intel AVX.
И разница между разными mmx и всеми разными SSE по дольшому счету, связана с
длинной регистра и как много инструкций они имеют.
Так, в AVX мы собираемся перейти к 256 битным регистрам, более широким регистрам, и они расширяемы, я думаю
до 1000 бит или 1024 бит. Один момент, но котором я бы остановился
это то, что интересно, требует ли это изменений в ваших путях хранения данных.
Если у вас сложение и вы имеете 32битное сложение, и сейчас вы хотитие сделать 8
8-битных сложений, вам требуется учитывать цепочки в 7 местах.
Так, это было простое сложение. Я предполагаю, что оно становится немного сложнее
если вы имеете что-то подобное переносу или сложению с переносом, или
чему-то вроде этого, потому что у вас может не быть просто места
сделать перенос сети. Здесь все еще есть некоторое место чтобы обрезать.
Но вы можете, оригинально представить, вы можете сделать переносы сквозными.
Сейчас вам нужно обрезать границы. Так, это определенно
сложность. Так, для операций похожих на умножение, если вы
хотите сделать 8 8битных умножений, структура будет немного
отличаться. Но кое-что, с большой проницательностью можно сказать,
это то, что вы имеете такую же логику. Вы посто эффективно добавляете мультиплексор
к отслеживанию цепочек, к путям данных.
И некоторые операции вы даже не должны будете добавлять.
Очевидно, что если вы работаете с чем-то вроде 8 8битных значений вы захотите
делать логическое или для них. Вам не нужно добавлять специальные
инструкции для этого.С точки зрения реализации, это
то что я пытаюсь здесь сделать. Вы можете посомтреть, вы имееете независимые сложения и они
все происходят паралельно. Итак, почему, почему нам нравяться расширения мультимедиа
векторные иструкцие или короткие векторные инструкции?
И сравним их с нашей большой векторной машиной.
Так, одно из основных отличий, это то что вы не можете контролировать длинну вектора.
Длинна вектора это способ которым задаестся длинна слова или машиных
инструкций. Так, длинна, длинна
родных типов данных для вашего набора инструкций. И
Вразброс, с большим шагом такие операции тяжело делать
Потому что обычно, есть только одна загрузка в хранилище.
И вы используете микропроцессорные инструкции загрузки и хранения.
Потому что процессору все равно. Это так же как унарные
операции или логические операции не требуют специальных инструкций чтоб сделать короткий вектор
или SIMD операцию.
Вам не нужна специальная инструкция для данных SIMD чтобы загрузить и сохранить.
Вы просто загружаете данные
И сохраняете данные. Это на самом деле начинает изменяться
немного. Некоторые новые версии SSE на самом деле
имеют некоторые модификации с разбросом.
Получается немного сложнее если думать об этом, так как вы не можете держать
полный адрес, если захотеть в векторе. Тоесть это не так как обычно делается
индексирование или адресация, так как вы не можете
обязатльно иметь полный адрес.
Но по существу они имеют что-то похожее к операциям сбора-распределения.
Некоторые моменты связанные с ограничением
длины вектора, это то что делается по большей части одной операцией.
Так, вам не обязательно делать 64 битные инструкции в одной, так, как мы делали с
нашим вектором длинной 64. Так это прото, просто
проблема. И к несчастью происходит то
что приходиться делать больше опреаций и больше инструкций.
И вы эффективно увеличиваете канал вашего модуля сбора.
Так что это не так просто.
И наконец, я просто хотел сказать, что процесоры начинают сммещать
эти мультимедийные расширения в сторону векторных
процессоров. И она добавляют более богатые наборы инструкций.
Так, если мы возьмем SSC4 например или SSC4.2 здесь больше инмтрукций чем в
х86, которые может работает веселей. И длинна вектора даже получается
длинне, др 124 бит, Или извините, 1024 бит.
вещи и длина вектора
увеличивается до 124, простите, до 1024 бит