50.5. OUT-OF-ORDER EXECUTION




			Архитектура
		   (по потоку выполнения)
		 /            |            \
   фон Неймановская       поток данных     поток запросов
   ------------- команда выполняется когда --------------
   при передаче           готовы данные    когда нужен
   ей управления          для нее          ее результат
   	
			
			Архитектура
		      (по запуску команды) Issue
			/        \
		 In-Order	Out-of-Order
		 в порядке	без проядка


			Архитектура
		      (по заканчиванию команды) Completion
			/          \
		    In-Order	  Out-of-Order
		 в порядке	без проядка



Как выглядит out-of-order execution?



Decoder помещает декодированные инструкции в Instruction Pool, Исполняющие устройства (execution units) выбирают команды, которые готовы к выполнению (т.е. их операнды готовы) и исполняют их. Более позняя команда может исполнится если предидущие не готовы (таким образом выполнение иден не по порядку (out-of-order). Retire unit выбирает и удаляет из poolа уже выполненые команды (в порядке в котором их выдал декодер). Пример Executon Init for Pentium Pro: ---------------------------------------------------------- Unit Actions ---------------------------------------------------------- 0 ALU Mul/Div Shift FPU ---------------------------------------------------------- 1 ALU Jumps ---------------------------------------------------------- 2 AGU Load Load ---------------------------------------------------------- 3 AGU Store ---------------------------------------------------------- 4 Store ----------------------------------------------------------


В современных процессорах x86-архитектуры начиная с Pentium Pro происходит code-morphing. Сложные x86 команды преобразуются в простые mOPS команды которые и выполняются.




Варианты out-of-order

Для нашего примера примем: Decoder может декодировать 2 команды за такт. Выполнение команд: Команда Execution Unit Время I1 1 2 I2 2 1 I3 3 1 I4 3 1 I5 2 1 I6 2 1


In Order issue with in-order completion: (запуск по порядку и завершение по-порядку)



(Конвеер двигается только тогда когда все команды на стадии закончены) Декодированные I3 и I4 ждут пока выполнятся I1+I2. I4 ждет когда выполнится I3 (зависимость по ресурсам). I6 ждет когда выполнится I5 (зависимость по ресурсам). Общее время = 8.


In Order issue with out-of-order completion: (запуск по порядку и завершение не по порядку)



(одновременно могут выполняться 2 команды) Декодированная I4 ждет пока будет место. I4 ждет когда выполнится I3 (зависимость по ресурсам). I6 ждет когда выполнится I5 (зависимость по ресурсам). Общее время = 7. Out of order issue with out-of-order completion: (запуск не по порядку и завершение не по порядку)

(все могут выполняться не одновременно) Общее время = 6.


Имплементация












Детали Instruction Poolа:



Декодер помещает инструкцию с свободный слот в кольцевом буфере instruction pool. Retired pointer показывает откуда можно начать убирать команды Retire unitу. Показаны 4 команды находящиеся в состояниях: Running (выполняется) Complete (выполнена) Ready to run (готова к выполнению) Wait for some condition (ждет готовности операндов)











Index Prev Next