Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Для устранения конфликтов по данным



Многие типы приостановок конвейера по данным могут происходить достаточно часто.

Пример: для оператора языка высокого уровня А:=В+С компилятор сгенерирует, скорее всего, следующую последовательность команд:

MOV AX,B

MOV BX,C

ADD AX,BX

MOV A,AX

Выполнение команды ADD должно быть приостановлено до тех пор, пока не станет доступным поступающий из памяти операнд С.

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

В общем случае планирование конвейера компилятора может требовать увеличенного количества регистров. Многие современные компиляторы используют технику планирования команд для улучшения производительности конвейера. В простейшем алгоритме компилятор просто планирует распределение команд в одном и том же базовом блоке.

Базовый блок представляет собой линейный участок последовательности программного кода, в котором отсутствуют команды перехода, за исключением начала и конца участка (переходы внутрь этого участка тоже должны отсутствовать). Планирование такой последовательности команд осуществляется достаточно просто: поскольку компилятор знает, что каждая команда в блоке будет выполняться, если выполняется хотя бы первая из них, и можно просто построить график зависимости этих команд и упорядочить их так, чтобы минимизировать приостановки конвейера. Для простых конвейеров стратегия планирования на основе базовых блоков вполне удовлетворительна.





Дата публикования: 2015-02-03; Прочитано: 274 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.006 с)...