Системы с конвейерной обработкой данных

Разработчики архитектуры компьютеров давно начали прибегали к методам проек­тирования, известным под общим названием «совмещение операций», при котором аппа­ратура компьютера в любой момент времени выполняет одновременно более одной базо­вой операции. Этот общий метод включает два понятия: параллелизм и конвейеризацию. Хотя у них много общего и их зачастую трудно различать на практике, эти термины отра­жают два совершенно различных подхода. При параллелизме совмещение операций дос­тигается путем воспроизведения в нескольких копиях аппаратной структуры. Высокая производительность достигается за счет одновременной работы всех элементов структур, осуществляющих решение различных частей задачи.

Конвейеризация (или конвейерная обработка) в общем случае основана на разделе­нии подлежащей исполнению функции на более мелкие части, называемые ступенями, и выделении для каждой из них отдельного блока аппаратуры. Так обработку любой ма­шинной команды можно разделить на несколько этапов (несколько ступеней), организо­вав передачу данных от одного этапа к следующему. Получаем очевидный выигрыш в скорости обработки за счет совмещения прежде разнесенных во времени операций. Пред­положим, что в операции можно выделить пять микроопераций, каждая из которых вы­полняется за одну единицу времени. Если есть одно неделимое последовательное устрой­ство, то 100 пар аргументов оно обработает за 500 единиц. Если каждую микрооперацию выделить в отдельный этап (или иначе говорят - ступень) конвейерного устройства, то на пятой единице времени на разной стадии обработки такого устройства будут находится первые пять пар аргументов, а весь набор из ста пар будет обработан за 5+99=104 едини­цы времени - ускорение по сравнению с последовательным устройством почти в пять раз (по числу ступеней конвейера).

Для иллюстрации работы описанного выше конвейера будем считать, что выполне­ние типичной команды можно разделить на следующие этапы:

выборка команды - IF (по адресу, заданному счетчиком команд, из памяти извлека­ется команда);

декодирование команды / выборка операндов из регистров - ID; выполнение операции / вычисление эффективного адреса памяти - ЕХ; обращение к памяти - MEM; запоминание результата - WB.

Работу конвейера можно условно представить, используются временные диаграммы, (рис. 7.2), на которых обычно изображаются выполняемые команды, номера тактов и эта­пы выполнения команд.

Команда Номер такта
                 
Команда i IF ID EX MEM WB        
Команда i-t-l   IF ID EX MEM WB      
Команда i+2     IF ID EX MEM WB    
Команда i+3       IF ID EX MEM WB  
Команда i+4         IF ID EX MEM WB

Рис. 7.2 Диаграмма работы простейшего конвейера

Конвейеризация увеличивает пропускную способность процессора (количество ко­манд, завершающихся в единицу времени), но она не сокращает время выполнения от­дельной команды. В действительности, она даже несколько увеличивает время выполне­ния каждой команды из-за накладных расходов, связанных с управлением регистровыми станциями. Однако увеличение пропускной способности означает, что программа будет выполняться быстрее по сравнению с простой неконвейерной схемой. Конвейеризация эффективна только тогда, когда загрузка конвейера близка к пол­ной, а скорость подачи новых команд и операндов соответствует максимальной произво­дительности конвейера. Если произойдет задержка, то параллельно будет выполняться меньше операций и суммарная производительность снизится. Это связано с тем, что при реализации конвейерной обработки возникают ситуации, которые препятствуют выполне­нию очередной команды из потока команд в предназначенном для нее такте. Такие ситуа­ции называются конфликтами. Конфликты снижают реальную производительность кон­вейера, которая могла бы быть достигнута в идеальном случае. Существуют три класса конфликтов:

1. Структурные конфликты, которые возникают из-за конфликтов по ресурсам, когда аппаратные средства не могут поддерживать все возможные комбинации команд в режиме одновременного выполнения с совмещением.

2. Конфликты по данным, возникающие в случае, когда выполнение одной команды зависит от результата выполнения предыдущей команды.

3. Конфликты по управлению, которые возникают при конвейеризации команд перехо­дов и других команд, которые изменяют значение счетчика команд.

Конфликты в конвейере приводят к необходимости приостановки выполнения ко­манд (pipeline stall). Обычно в простейших конвейерах, если приостанавливается какая-либо команда, то все следующие за ней команды также приостанавливаются. Команды, предшествующие приостановленной, могут продолжать выполняться, но во время приос­тановки не выбирается ни одна новая команда.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: