Конвейеризация и векторизация обработки данных Для повышения скорости выполнения команд был придуман конвейер. Команда в процессе выполнения проходит целую цепь этапов. Каждое звено цепи обслуживается своим аппаратным обеспечением и процессор ждет, пока команда пройдет всю цепь, а затем загружает новую. Смысл конвейера заключается в том, что бы аппаратное обеспечение не простаивало, а постоянно работало. Это достигается тем, что после выполнения команды и передачи ее далее, звено принимает и выполняет следующую. Таким образом происходит частичное временное перекрытие выполнепия нескольких команд, которое зависит от количества звеньев конвейейра. Такой способ распараллеливания операций называется конвейеризацией. Рассмотрим простой конвейер, состоящий из 5 звеньев. Звено выборки команд берет команду из памяти и помещает в буфер. Звено декодирования определяет тип команды и операндов, нужных команде. Звено выборки операндов определяет местонахождение операндов и вызывает их. Звено выполнения команд с помощью АЛУ совершает операцию, указанную командой. Звено возврата записывает результат операции в нужный регистр. В современных процессорах звеньев конвейера может быть намного больше. Для дальнейшего повышения производительности в процессоре можно разместить не один, а два конвейера, работающих параллельно. Общее звено выборки берет из памяти две команды и помещает каждую из них в отдельный конвейер. Эти две команды не должны конфликтовать между собой, т.е. у них не должно быть совместно используемых регистров и не должны пользоваться одним и тем же операндом. Предупреждать конфликты должно дополнительное аппаратное обеспечение или компилятор. Рассмотрим упрощенную схему процессора Pentium I, использующего для выполнения команд два конвейера U и V. Команды могут направляться в каждое из этих устройств одновременно, причем более сложная команда поступает в конвейер U, а менее сложная в конвейер V. Сложные вычесления с плавающей точкой выполняются одноименным устройством. Остальные устройства процессора предназначены для снабжения конвейеров необходимыми командами и данными. В этом процессоре используется раздельная кэш-память команд и данных (модифицированная гарвардская структура), что обеспечивает независимость обращений процессора к памяти. В процессоре предусмотрен механизм предсказания ветвлений переходов. С этой целью на кристалле размещена небольшая кэш-память, которая называется буфером целевых адресов переходов (BTB), и две независимые пары буферов предварительной выборки команд. Неправильный прогноз приводит к приостановке работы конвейеров на 3-4 такта. Так же можно разработать процессор с четырьмя конвейерами, но это требует создания дополнительного громоздкого аппаратного обеспечения. Разработчики пошли по иному пути. Пропускная способность звена выполнения команд меньше, чем других звеньев. Поэтому был разработан конвейер с большим количеством функциональных блоков. Архитектура, использующая такой конвейер, получила название “суперскалярная”. Более подробно суперскалярную архитектуру можно рассмотреть на примере процессора Pentium IV. При обработке массивов данных, состоящих из элементов одинаковой структуры, называемых векторами, производятся одинаковае операции над этими элементами. Для повышения скорости обработки этих массивов, вводятся команды процессора, которые обеспечивают параллельную обработку данных, определяющих структуру вектора. Т.е.одновременно выполняются одни и те же вычисления над различными данными. Такой способ распараллеливания операций называется векторизацией и часто используется совместно с конвейерной обработкой.