Тема 9_2010_Векторные процессоры (Лекции (ещё одни)), страница 3
Описание файла
PDF-файл из архива "Лекции (ещё одни)", который расположен в категории "". Всё это находится в предмете "вычислительные машины, системы и сети (вмсис)" из 7 семестр, которые можно найти в файловом архиве НИУ «МЭИ» . Не смотря на прямую связь этого архива с НИУ «МЭИ» , его также можно найти и в других разделах. Архив можно найти в разделе "лекции и семинары", в предмете "вмсс" в общих файлах.
Просмотр PDF-файла онлайн
Текст 3 страницы из PDF
Названные операции имеются в задачах сортировки, быстрогопреобразования Фурье, при обработке графов, представленных в форме списка, и вомногих других задачах.Быстродействие векторного процессора на таких операциях снижается до уровнябыстродействия скалярного процессора.Выше конвейерные ЭВМ были описаны по частям: сначала скалярная часть, затемвекторная.Теперь рассмотрим полную структуру векторной ЭВМ на примере машины CRAY(рис. 6). Архитектура типичного векторного суперкомпьютера Cray следующая (вкачестве примера рассмотрим старую модель Cray-1):•Процессор имеет 8 векторных регистров, каждый из которых может хранить64 слова по 64 бита каждое.•Есть также 8 скалярных регистров для 64-битовых слов и•8 регистров для адресации для 20-битовых слов.•Вместо кэш-памяти используются специальные регистры, управлениекоторыми осуществляется программным путем из выполняющейсяпрограммы.Всего компьютер Cray-1 содержал до 12 конвейеризованных процессоров,имевших отдельные конвейеры для различных арифметических и логических операций.Скорость работы процессора строго согласована со скоростью работы оперативнойпамяти.CRAY-1, созданная в 1976 г., была одной из первых ЭВМ, в которой в полной мерепроявились все характерные особенности векторно-конвейерных машин.
Машина CRAY1 включает стандартные для любой ЭВМ секции: управления памятью и ввода-вывода,регистровую секцию и группу функциональных устройств. Однако состав оборудованиякаждой секции существенно отличается от аналогичных устройств последовательныхЭВМ.Память используется как для выборки команд и векторных данных (конвейерныйрежим), так и для выборки скалярных данных (поточный режим). Для организациипоточного режима применяются буферные регистры адреса (B0...B63) и данных(T0...T63). Память обладает большой пропускной способностью, однако для разных узловне всегда используется полная пропускная способность. Максимальная скорость нужнадля заполнения буферов команд.Структура УУ: здесь имеются механизмы предварительного просмотра команд, атакже резервирования регистров и функциональных устройств.Рис.
6. Архитектура процессора CRAY-1.Для выполнения адресных операций используются группа адресных регистровA0...A7 и специальные АЛУ для операций целочисленной арифметики. Эти АЛУ, как ивсе другие функциональные устройства, имеют конвейерную структуру.Скалярные операции выполняются с помощью группы регистров S0...S7, авекторные - с помощью векторных регистров V0...V7.Наибольший интерес представляет состав функциональных устройств. Ввыполнении скалярных операций участвует семь функциональных устройств: четыре дляработы с целочисленной арифметикой и три для работы с числами с плавающей запятой.Устройство "Счетчик" используется для подсчета числа единиц в операнде или числанулей, предшествующих первой единице операнда.Поскольку деление плохо поддается конвейеризации, в CRAY-1 оно выполняется вустройствах обратной аппроксимации и умножения посредством итерационнойпроцедуры.
Такой подход позволяет использовать конвейерную обработку на операцииумножения и зацепление операций.Векторные операции в CRAY-1 можно разделить на четыре типа. Векторнаяинструкция первого типа получает операнды из одного или двух регистров V и отправляетрезультат в другой регистр V. Последовательные пары операндов передаются из Vj и Vk вконвейерное АЛУ в каждом такте, и соответствующий результат на выходе АЛУпоявляется на m тактов позже, где m - длина конвейера. Результат отправляется в регистррезультата Vi. Векторная инструкция второго типа получает по одному операнду изрегистров S и V. Инструкции двух других типов передают данные между памятью ирегистрами V.При выдаче векторной инструкции требуемое АЛУ и регистры операндоврезервируются на число тактов, определяемое длиной вектора.
Последующая векторнаяинструкция, требующая тех же ресурсов, что и выполняемая, не может выполняться дотех пор, пока ресурсы не будут освобождены. Однако выполнение последующихинструкций, не пересекающихся по ресурсам с неоконченной инструкцией, разрешается.Две команды машины CRAY-1 требуют специального объяснения. Установкамаски 64-разрядного векторного регистра маски (VM) соответствует 64 элементамвекторного регистра. Если элемент удовлетворяет условию, то соответствующий разрядVM устанавливается в 1, в противном случае - в 0. Таким образом команда, VM V5, Zустанавливает разряд VM в 1, когда элементы V5 равны нулю; VM V7, P устанавливаетразряд VM в 1, если элементы V7 положительны.По команде слияния векторов содержимое двух векторных регистров Vi и Vkсливается в один результирующий вектор Vi в соответствии с маской регистра VM.
Если lй разряд VM - единица, то l-й элемент Vj становится l-м элементом регистра результатов, впротивном случае l-й элемент Vk становится l-м элементом регистра результатов.Значение регистра длины вектора определяет число сливаемых элементов. Таким образом,команда ViVj!Vk&VM сливает Vj и Vk в Vi в соответствии с комбинацией в VM;V7S2!V6&VM сливает S2 и V6 в V7 в соответствии с комбинацией в VM.Цель команд маски и слияния - обеспечить условные вычисления с векторнымикомандами.В CRAY-1 соотношение объема памяти хорошо сбалансировано спроизводительностью системы.
По эмпирическому правилу Амдала 1 бит памяти долженприходиться на 1 оп/с. В CRAY-1 при памяти 1 Мслов (64 Мбит) производительностьравна 80 Моп/с.В данной системе впервые применено зацепление операций. За счет этого могутработать два, а иногда три функциональных устройства, доводя производительностьсистемы до 160 и даже 240 миллионов результатов с плавающей запятой в секунду.5.Дополнительные затраты на организацию векторных вычислений во времяработы программыДля работы на векторных ЭВМ наиболее удобными являются массивы с длиной,равной длине векторного регистра.
Однако это благое пожелание очень редковыполняется. Более того, часто число элементов массива вообще не кратно 128.Рассмотрим простейший цикл, который можно векторизовать. Пусть дан массив m длины128, который надо заполнить по следующему алгоритму:do i=1, 128m(i) = ienddoМы будем пользоваться командами ассемблера несуществующей ЭВМ, новполне отражающими смысл операций с векторными регистрами. Приведенный циклможно записать на ассемблере так:SETLEN #128 ; установить используемое число; элементов в векторных регистрах (во всех)SETINC #4; установить смещение к последующему; элементу массива в памяти (4 байта)SETNUM v0; записать в элементы векторного регистра v0; их номера начиная с нуля и кончая 127ADD #1, v0 ; добавить 1 к каждому элементу регистра v0SAVE v0, m ; записать элементы v0 в ОЗУ в последовательные; слова (смещение = 4) начиная с адреса mОбратите внимание на 3 команду - каждый элемент векторного регистра "знает" свойномер.
Это делает очень простым вычисление переменной цикла: после добавления 1значение переменной получается записанным в соответствующий элемент вектора. Всего5 последовательных команд векторного процессора выполняют цикл из 128 повторений.Здесь нет ни команд сравнения, ни условных переходов.Теперь увеличим размер массива и число повторений цикла до N:do i=1, Nm(i) = ienddoДля правильной работы процессора мы обязаны установить число используемыхэлементов вектора не более, чем 128. Если N будет произвольным, то нам придетсяпревратить данный одинарный цикл в двойной:123do inc=0, N-1, 128NN = min0( 128, N-inc )do i=1, NNm(inc+i) = inc+ienddoenddoЦикл с меткой 1 выполняет "разбиение" массива на подмассивы длиной 128элементов.
Переменная inc имеет смысл смещения от первого элемента массива кочередному подмассиву: 0, 128, 256... Переменная NN определяет длину подмассива.Обычно она равна 128, но последний подмассив может иметь меньшую длину, если N некратно 128. Функция min0 выбора минимального значения в операторе с меткой 2 выдаетзначение не 128 только для последнего подмассива.
Внутренний цикл с меткой 3практически эквивалентен циклу из предыдущего примера.Имеется только 3 отличия:• число элементов в векторном регистре равно NN,• к параметру цикла дополнительно надо добавлять значение inc,•регистр записывать в память начиная не с начала массива, а c элемента с номеромi+incЭтот цикл может быть записан в машинных командах примерно так:SETLEN NNSETINC #4SETNUM v0; число элементов в векторных регистрах = NN; смещение к последующему элементу массива; записать в элементы векторного регистра v0; их номера начиная с нуля и кончая 127ADD #1, v0; добавить 1 к каждому элементу регистра v0ADD inc, v0 ; добавить значение переменной incMOVE inc, r0 ; записать в скалярный регистр r0 значение; переменной inc - смещение от первого; элемента массива к m(inc+1)MUL #4, r0; умножить на 4 - смещение в байтахADD #m, r0; добавить адрес массива m, получается адрес; элемента m(inc+1)SAVE v0, @r0 ; записать элементы v0 в ОЗУ в последовательные; слова (смещение = 4) начиная с адреса,; хранящегося в регистре r0По отношению к простейшему циклу добавились одна векторная и трискалярных команды.
Однако это только внутренний цикл. Охватывающий его цикл сметкой 1 и вычисление NN создадут дополнительный код, который будет выполнятьсястолько же раз, сколько и код для внутреннего цикла. Транслятор всегда будет создаватьохватывающий цикл, если N есть переменная, а не константа со значением от 1 до 128(для 128-элементного векторного регистра).Из сказанного выше следует, что эффективность векторной программы будетневысокой при работе с небольшими массивами, длина которых заранее неизвестна.Циклы с тремя повторениями могут в векторном режиме выполняться медленнее,чем в скалярном на той же машине..