Алгоритм Томасуло — алгоритм, який використовується в комп'ютерній архітектурі апаратного забезпечення, для динамічного планування команд, яке передбачає позачергове виконання, з метою ефективного використання функціональних блоків процесора. Алгоритм був розроблений Робертом Томасуло у 1967 році, коли він працював в IBM, і вперше реалізований в (IBM System/360 Model 91) в блоці операцій з рухомою комою.
Головними нововведеннями алгоритму Томасуло є перейменування регістрів в апаратних засобах, [en] для всіх функціональних блоків, і спільна шина даних (СШД), по якій обчислені значення синхронно передаються в усі блоки резервування, які можуть мати потребу в них. Ці зміни підвищили ефективність паралельного виконання інструкцій, виконання яких, при використанні методу [en] або більш ранніх алгоритмів, призводили до зупинки.
У 1997 році Роберт Томасуло отримав нагороду Еккерта-Моклі за розробку алгоритму.
Концепції реалізації
Нижче наведені поняття, необхідні для реалізації алгоритму Томасуло:
Загальна шина даних
Загальна шина даних (ЗШД) з'єднує блок резервування безпосередньо з функціональними блоками. На думку Томасуло це «зберігає пріоритет при одночасному стимулюванні паралелізму».
Це має два важливих наслідки:- Функціональні одиниці можуть отримати доступ до результату будь-якої операції, без участі регістра з рухомою комою, що дозволяє кільком пристроям, які очікують на результат, продовжити роботу не чекаючи вирішення неузгодженості для доступу до регістрового файлу порту читання.
- Виявлення небезпек і контроль виконання розподілення. Блоки резервування контролюють такі ситуації, коли команда може виконатись швидше, ніж виділиться хоча б один блок небезпеки.
Порядок інструкції
Інструкції видаються послідовно, так що ефекти послідовності інструкцій, такі як виключення, викликані цими інструкціями, виникають в тому ж порядку, як і на послідовному процесорі, незалежно від того, що вони виконуються позачергово (тобто не послідовно).
Перейменування регістрів
Алгоритм Томасуло використовує перейменування регістрів, щоб правильно зробити паралельне виконання. Всі регістри загального призначення і блоки резервування містять або реальне значення, або значення заповнювача. Якщо реальне значення недоступно в регістрі призначення на стадії випуску, спочатку використовуються значення заповнювача. Значення заповнювача — це тег, який вказує блок резервування, який буде виробляти реальне значення. Коли пристрій завершує і передає результат на ЗШД, заповнювач буде замінений реальним значенням.
Кожен функціональний блок має один блок резервування. Блок резервування містить інформацію, необхідну для виконання однієї команди, в тому числі операції і операндів. Функціональний блок починає обробку, коли він вільний, і коли всі вихідні операнди, необхідні для навчання, реальні.
Винятки
З практичної точки зору, можуть бути такі винятки, для яких не вистачає інформації про статус виключення, і в цьому випадку процесор може виклакати спеціальне виключення, яке називається «неточне» виключення. Неточні виключення не можуть відбуватися у не позачерговому виконанні реалізації, так як стан процесора змінюється тільки в програмному порядку (див Конвеєр команд).
Програми, які виявляють «точний» виняток, де може бути визначена конкретна команда, яка спонукає виняток, можуть бути перезавантаженими або повторно виконаними в точці виключення. Проте, ті, які виявляють «неточні» винятки, як правило, не можуть бути перезавантаженими або повторно виконаними, так як система не може визначити конкретні інструкції, які мали виняток.
Життєвий цикл інструкції
Три етапи, які перераховані нижче — це етапи, через які проходить кожна інструкція з моменту видачі до її успішного виконання.
Позначення
- Op — представляє операцію, яка виконується над операндами
- Qj, Qk -блок резервування, який буде виробляти відповідний операнд-джерело (0 вказує, що значення знаходиться в Vj, Vk)
- Vj, Vk — значення початкових операндів
- A — використовується для зберігання інформації про адресу пам'яті для завантаження або зберігання
- Busy — 1, якщо зайнятий, 0 якщо не зайнятий
- Qi — (тільки блоки реєстрації) блок резервування, чий результат повинен бути збережений в цьому регістрі (якщо порожньо або 0, значення не призначені для цього регістра)
Етап 1: Випуск
В стадії видачі інструкція видається для виконання, якщо всі операнди і блоки резервування готові, інакше вони застопорилися. Регістри перейменовуються на цьому кроці, усуваючи WAR і WAW небезпеки.
- Отримує наступну команду з голови черги команд. Якщо операнди команд в даний час в регістрах, то
- Якщо відповідний функціональний блок доступний, інструкція виконується.
- В іншому випадку, оскільки немає вільного функціонального блоку, інструкція затримується поки блок резервування або буфер не буде вільним.
- В іншому випадку, ми можемо припустити, що операнди не в регістрах, і тому використовують віртуальні значення. Функціональний блок повинен обчислити реальне значення, щоб стежити за функціональними блоками, які виробляють операнд.
Псевдо-код
Стан інструкції | Зачекайте доки | Дія |
---|---|---|
Видача | Блок r порожній | if (RegisterStat[rs].Qi¦0) { RS[r].Qj ← RegisterStat[rs].Qi } else { RS[r].Vj ← Regs[rs]; RS[r].Qj ← 0; } if (RegisterStat[rt].Qi¦0) { RS[r].Qk ← RegisterStat[rt].Qi; } else { RS[r].Vk ← Regs[rt]; RS[r].Qk ← 0; } RS[r].Busy ← yes; RegisterStat[rd].Q ← r; |
Завантаження або зберігання | Буфер r порожній | if (RegisterStat[rs].Qi¦0) { RS[r].Qj ← RegisterStat[rs].Qi; } else { RS[r].Vj ← Regs[rs]; RS[r].Qj ← 0; } RS[r].A ← imm; RS[r].Busy ← yes; |
Тільки завантаження | RegisterStat[rt].Qi ← r; | |
Тільки зберігання | if (RegisterStat[rt].Qi¦0) { RS[r].Qk ← RegisterStat[rs].Qi; } else { RS[r].Vk ← Regs[rt]; RS[r].Qk ← 0 }; |
Етап 2: Виконання
У стадії виконання, операції інструкцій виконуються. Інструкції затримуються на цьому етапі, доки всі їхні операндів не будуть доступні, виключаючи RAW небезпеки. Правильність програми підтримується за рахунок ефективного обчислення адреси для запобігання небезпеки через пам'ять.
- Якщо один або кілька операндів ще не доступні, то: чекати, доки операнд стане доступним на ЗШД.
- Коли всі операнди доступні, то: якщо команда є завантаженням або зберіганням
- Обчислити ефективну адресу, коли базовий регістр доступний, і помістіть його в буфері завантаження / зберігання
- Якщо команда завантаження, то: виконати, як тільки блок пам'яті доступний
- В іншому випадку, якщо інструкція зберігання, то: чекати значення, яке буде зберігатися, перед відправкою його в блок пам'яті
- Обчислити ефективну адресу, коли базовий регістр доступний, і помістіть його в буфері завантаження / зберігання
- В іншому випадку, команда представляє собою операцію арифметико-логічного блока (АЛП): виконати команду у відповідному функціональному блоці.
Псевдо-код
Стан інструкції | Зачекайте доки | Дія |
---|---|---|
FP операція | (RS[r].Qj = 0) and (RS[r].Qk = 0) | Порахувати результат: операнди в Vj та Vk |
Завантаження/Зберігання крок 1 | RS[r].Qj = 0 & r голова черги завантаження/зберігання | RS[r].A ← RS[r].Vj + RS[r].A; |
Завантаження крок 2 | Завантаження крок 1 виконаний | Читати з Mem[RS[r].A] |
Стадія 3: Записати результат
На стадії запису результату, результати операції АЛУ записуються назад в регістри і операції зберігання записуються назад в пам'ять.
- Якщо команда була операція АЛУ
- Якщо результат доступний, то: записати його на ЗШД і звідти в регістри і блоки резервування які чекають на цей результат
- В іншому випадку, якщо це була команда зберігання, то: записати дані в пам'ять.
Псевдо-код
Стан інструкції | Зачекайте доки | Дія |
---|---|---|
FP операція або завантаження | Виконання завершується при доступних r & ЗШД | ∀x(if (RegisterStat[x].Qi = r) { regs[x] ← result; RegisterStat[x].Qi = 0 }); ∀x(if (RS[x].Qj = r) { RS[x].Vj ← result; RS[x].Qj ← 0; }); ∀x(if (RS[x].Qk = r) { RS[x].Vk ← result; RS[x].Qk ← 0; }); RS[r].Busy ← no; |
Зберігання | Виконання завершується при r & RS[r].Qk = 0 | Mem[RS[r].A] ← RS[r].Vk; RS[r].Busy ← no; |
Покращення алгоритмів
Поняття резервування, перейменування регістрів, та загальної шини даних в алгоритмі Томасуло становить значний прогрес у проектуванні високопродуктивних комп'ютерів.
Блоки резервування беруть на себе відповідальність очікування операндів в присутності залежностей даних і інших невідповідностей, таких як зміни часу доступу до пам'яті і швидкості ланцюга, тим самим звільняючи функціональні блоки. Це поліпшення долає довгі затримки з рухомою комою і доступом до пам'яті. Зокрема, алгоритм більш терпимо ставиться до помилок кешу. Крім того, програмісти звільняються від реалізації оптимізованого коду. Це є результатом того, що загальна шина даних і блоки резервування працюють разом, щоб зберегти залежності, а також заохочення паралелізму
.Відстежуючи операнди для інструкцій в резервуванні і перейменовуючи регістри в апаратних засобах алгоритм зводить до мінімуму небезпеки (читання після запису (RAW) і усуває запис після запису (WAW) і запис після читання (WAR)) комп'ютерної архітектури. Це підвищує продуктивність за рахунок скорочення втрат часу, які могли б бути викликані зупинками.
Не менш важливе поліпшення алгоритму це те, що проектування не обмежується певною структурою комунікаційних ліній. Це поліпшення дозволяє алгоритму бути більш широко використовуваним процесорами багатьох випусків. Крім того, алгоритм легко розширюється, щоб включити додаткові галузі.
Сучасне застосування
За межами IBM алгоритм Томасуло не використовувався протягом декількох років після його впровадження в System/360 Model 91. Проте, починаючи з 1990-х років, застосування суттєво зростає, з наступних причин:
- Після того, як кеш став звичайною справою, здатність алгоритму Томасуло підтримувати паралельність під час непередбачуваних навантажень, викликаних кеш-промахами, стала цінною в процесорах.
- Динамічне планування і спекулятивне розгалуження дозволило суттєво підняти швидкодію процесорів.
- Поширення програмного забезпечення для масового ринку, що розповсюджується у вигляді двійкового коду: випуск різних версій ПЗ під процесори, що відрізняються структурою конвеєра, був недоцільним (в тому числі через складність для користувачів, що інсталюють програму) чи економічно невигідним. Реалізація позачергового виконання команд безпосередньо у процесорі дозволяє значною мірою уніфікувати бінарний код (тонкі архітектурні оптимізації, як правило, робляться лише у найбільш критичних до швидкодії місцях програми).
Багато сучасних процесорів реалізують динамічні схеми планування, які є похідними від оригінального алгоритму Томасуло, в тому числі популярні процесори архітектури x86.
Примітки
- . ACM Awards. ACM. Архів оригіналу за 14 грудня 2014. Процитовано 8 грудня 2014.
- (Jan 1967). An Efficient Algorithm for Exploiting Multiple Arithmetic Units. IBM Journal of Research and Development. IBM. 11 (1): 25—33. doi:10.1147/rd.111.0025. ISSN 0018-8646.
- Hennessy, John L.; Patterson, David A. (2012). . Waltham, MA: Elsevier. ISBN .
- (PDF). washington.edu. Washington University. 2006. Архів оригіналу (PDF) за 8 лютого 2016. Процитовано 8 грудня 2014.
- (Звіт). Intel. September 2014. Архів оригіналу за 9 грудня 2014. Процитовано 8 грудня 2014.
- Yoga, Adarsh. . The boozier. Архів оригіналу за 17 квітня 2016. Процитовано 4 квітня 2016.
Див. також
Посилання
- Динамічне планування — Алгоритм Томасуло [ 10 березня 2014 у Wayback Machine.]
- HASE Java аплет моделювання алгоритму Томасуло [ 11 вересня 2013 у Wayback Machine.]
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Algoritm Tomasulo algoritm yakij vikoristovuyetsya v komp yuternij arhitekturi aparatnogo zabezpechennya dlya dinamichnogo planuvannya komand yake peredbachaye pozachergove vikonannya z metoyu efektivnogo vikoristannya funkcionalnih blokiv procesora Algoritm buv rozroblenij Robertom Tomasulo u 1967 roci koli vin pracyuvav v IBM i vpershe realizovanij v IBM System 360 Model 91 v bloci operacij z ruhomoyu komoyu Golovnimi novovvedennyami algoritmu Tomasulo ye perejmenuvannya registriv v aparatnih zasobah en dlya vsih funkcionalnih blokiv i spilna shina danih SShD po yakij obchisleni znachennya sinhronno peredayutsya v usi bloki rezervuvannya yaki mozhut mati potrebu v nih Ci zmini pidvishili efektivnist paralelnogo vikonannya instrukcij vikonannya yakih pri vikoristanni metodu en abo bilsh rannih algoritmiv prizvodili do zupinki U 1997 roci Robert Tomasulo otrimav nagorodu Ekkerta Mokli za rozrobku algoritmu Koncepciyi realizaciyiBlok obchislen z ruhomoyu komoyu Tomasulo Nizhche navedeni ponyattya neobhidni dlya realizaciyi algoritmu Tomasulo Zagalna shina danih Zagalna shina danih ZShD z yednuye blok rezervuvannya bezposeredno z funkcionalnimi blokami Na dumku Tomasulo ce zberigaye prioritet pri odnochasnomu stimulyuvanni paralelizmu 33 Ce maye dva vazhlivih naslidki Funkcionalni odinici mozhut otrimati dostup do rezultatu bud yakoyi operaciyi bez uchasti registra z ruhomoyu komoyu sho dozvolyaye kilkom pristroyam yaki ochikuyut na rezultat prodovzhiti robotu ne chekayuchi virishennya neuzgodzhenosti dlya dostupu do registrovogo fajlu portu chitannya Viyavlennya nebezpek i kontrol vikonannya rozpodilennya Bloki rezervuvannya kontrolyuyut taki situaciyi koli komanda mozhe vikonatis shvidshe nizh vidilitsya hocha b odin blok nebezpeki Poryadok instrukciyi Instrukciyi vidayutsya poslidovno tak sho efekti poslidovnosti instrukcij taki yak viklyuchennya viklikani cimi instrukciyami vinikayut v tomu zh poryadku yak i na poslidovnomu procesori nezalezhno vid togo sho voni vikonuyutsya pozachergovo tobto ne poslidovno Perejmenuvannya registriv Algoritm Tomasulo vikoristovuye perejmenuvannya registriv shob pravilno zrobiti paralelne vikonannya Vsi registri zagalnogo priznachennya i bloki rezervuvannya mistyat abo realne znachennya abo znachennya zapovnyuvacha Yaksho realne znachennya nedostupno v registri priznachennya na stadiyi vipusku spochatku vikoristovuyutsya znachennya zapovnyuvacha Znachennya zapovnyuvacha ce teg yakij vkazuye blok rezervuvannya yakij bude viroblyati realne znachennya Koli pristrij zavershuye i peredaye rezultat na ZShD zapovnyuvach bude zaminenij realnim znachennyam Kozhen funkcionalnij blok maye odin blok rezervuvannya Blok rezervuvannya mistit informaciyu neobhidnu dlya vikonannya odniyeyi komandi v tomu chisli operaciyi i operandiv Funkcionalnij blok pochinaye obrobku koli vin vilnij i koli vsi vihidni operandi neobhidni dlya navchannya realni Vinyatki Z praktichnoyi tochki zoru mozhut buti taki vinyatki dlya yakih ne vistachaye informaciyi pro status viklyuchennya i v comu vipadku procesor mozhe viklakati specialne viklyuchennya yake nazivayetsya netochne viklyuchennya Netochni viklyuchennya ne mozhut vidbuvatisya u ne pozachergovomu vikonanni realizaciyi tak yak stan procesora zminyuyetsya tilki v programnomu poryadku div Konveyer komand Programi yaki viyavlyayut tochnij vinyatok de mozhe buti viznachena konkretna komanda yaka sponukaye vinyatok mozhut buti perezavantazhenimi abo povtorno vikonanimi v tochci viklyuchennya Prote ti yaki viyavlyayut netochni vinyatki yak pravilo ne mozhut buti perezavantazhenimi abo povtorno vikonanimi tak yak sistema ne mozhe viznachiti konkretni instrukciyi yaki mali vinyatok Zhittyevij cikl instrukciyiTri etapi yaki pererahovani nizhche ce etapi cherez yaki prohodit kozhna instrukciya z momentu vidachi do yiyi uspishnogo vikonannya Poznachennya Op predstavlyaye operaciyu yaka vikonuyetsya nad operandami Qj Qk blok rezervuvannya yakij bude viroblyati vidpovidnij operand dzherelo 0 vkazuye sho znachennya znahoditsya v Vj Vk Vj Vk znachennya pochatkovih operandiv A vikoristovuyetsya dlya zberigannya informaciyi pro adresu pam yati dlya zavantazhennya abo zberigannya Busy 1 yaksho zajnyatij 0 yaksho ne zajnyatij Qi tilki bloki reyestraciyi blok rezervuvannya chij rezultat povinen buti zberezhenij v comu registri yaksho porozhno abo 0 znachennya ne priznacheni dlya cogo registra Etap 1 Vipusk V stadiyi vidachi instrukciya vidayetsya dlya vikonannya yaksho vsi operandi i bloki rezervuvannya gotovi inakshe voni zastoporilisya Registri perejmenovuyutsya na comu kroci usuvayuchi WAR i WAW nebezpeki Otrimuye nastupnu komandu z golovi chergi komand Yaksho operandi komand v danij chas v registrah to Yaksho vidpovidnij funkcionalnij blok dostupnij instrukciya vikonuyetsya V inshomu vipadku oskilki nemaye vilnogo funkcionalnogo bloku instrukciya zatrimuyetsya poki blok rezervuvannya abo bufer ne bude vilnim V inshomu vipadku mi mozhemo pripustiti sho operandi ne v registrah i tomu vikoristovuyut virtualni znachennya Funkcionalnij blok povinen obchisliti realne znachennya shob stezhiti za funkcionalnimi blokami yaki viroblyayut operand Psevdo kod Stan instrukciyi Zachekajte doki Diya Vidacha Blok r porozhnij if RegisterStat rs Qi 0 RS r Qj RegisterStat rs Qi else RS r Vj Regs rs RS r Qj 0 if RegisterStat rt Qi 0 RS r Qk RegisterStat rt Qi else RS r Vk Regs rt RS r Qk 0 RS r Busy yes RegisterStat rd Q r Zavantazhennya abo zberigannya Bufer r porozhnij if RegisterStat rs Qi 0 RS r Qj RegisterStat rs Qi else RS r Vj Regs rs RS r Qj 0 RS r A imm RS r Busy yes Tilki zavantazhennya RegisterStat rt Qi r Tilki zberigannya if RegisterStat rt Qi 0 RS r Qk RegisterStat rs Qi else RS r Vk Regs rt RS r Qk 0 180 Priklad Algoritmu Tomasulo Etap 2 Vikonannya U stadiyi vikonannya operaciyi instrukcij vikonuyutsya Instrukciyi zatrimuyutsya na comu etapi doki vsi yihni operandiv ne budut dostupni viklyuchayuchi RAW nebezpeki Pravilnist programi pidtrimuyetsya za rahunok efektivnogo obchislennya adresi dlya zapobigannya nebezpeki cherez pam yat Yaksho odin abo kilka operandiv she ne dostupni to chekati doki operand stane dostupnim na ZShD Koli vsi operandi dostupni to yaksho komanda ye zavantazhennyam abo zberigannyam Obchisliti efektivnu adresu koli bazovij registr dostupnij i pomistit jogo v buferi zavantazhennya zberigannya Yaksho komanda zavantazhennya to vikonati yak tilki blok pam yati dostupnij V inshomu vipadku yaksho instrukciya zberigannya to chekati znachennya yake bude zberigatisya pered vidpravkoyu jogo v blok pam yati V inshomu vipadku komanda predstavlyaye soboyu operaciyu arifmetiko logichnogo bloka ALP vikonati komandu u vidpovidnomu funkcionalnomu bloci Psevdo kod Stan instrukciyi Zachekajte doki Diya FP operaciya RS r Qj 0 and RS r Qk 0 Porahuvati rezultat operandi v Vj ta Vk Zavantazhennya Zberigannya krok 1 RS r Qj 0 amp r golova chergi zavantazhennya zberigannya RS r A RS r Vj RS r A Zavantazhennya krok 2 Zavantazhennya krok 1 vikonanij Chitati z Mem RS r A 180 Stadiya 3 Zapisati rezultat Na stadiyi zapisu rezultatu rezultati operaciyi ALU zapisuyutsya nazad v registri i operaciyi zberigannya zapisuyutsya nazad v pam yat Yaksho komanda bula operaciya ALU Yaksho rezultat dostupnij to zapisati jogo na ZShD i zvidti v registri i bloki rezervuvannya yaki chekayut na cej rezultat V inshomu vipadku yaksho ce bula komanda zberigannya to zapisati dani v pam yat Psevdo kod Stan instrukciyi Zachekajte doki Diya FP operaciya abo zavantazhennya Vikonannya zavershuyetsya pri dostupnih r amp ZShD x if RegisterStat x Qi r regs x result RegisterStat x Qi 0 x if RS x Qj r RS x Vj result RS x Qj 0 x if RS x Qk r RS x Vk result RS x Qk 0 RS r Busy no Zberigannya Vikonannya zavershuyetsya pri r amp RS r Qk 0 Mem RS r A RS r Vk RS r Busy no 180Pokrashennya algoritmivPonyattya rezervuvannya perejmenuvannya registriv ta zagalnoyi shini danih v algoritmi Tomasulo stanovit znachnij progres u proektuvanni visokoproduktivnih komp yuteriv Bloki rezervuvannya berut na sebe vidpovidalnist ochikuvannya operandiv v prisutnosti zalezhnostej danih i inshih nevidpovidnostej takih yak zmini chasu dostupu do pam yati i shvidkosti lancyuga tim samim zvilnyayuchi funkcionalni bloki Ce polipshennya dolaye dovgi zatrimki z ruhomoyu komoyu i dostupom do pam yati Zokrema algoritm bilsh terpimo stavitsya do pomilok keshu Krim togo programisti zvilnyayutsya vid realizaciyi optimizovanogo kodu Ce ye rezultatom togo sho zagalna shina danih i bloki rezervuvannya pracyuyut razom shob zberegti zalezhnosti a takozh zaohochennya paralelizmu 33 Vidstezhuyuchi operandi dlya instrukcij v rezervuvanni i perejmenovuyuchi registri v aparatnih zasobah algoritm zvodit do minimumu nebezpeki chitannya pislya zapisu RAW i usuvaye zapis pislya zapisu WAW i zapis pislya chitannya WAR komp yuternoyi arhitekturi Ce pidvishuye produktivnist za rahunok skorochennya vtrat chasu yaki mogli b buti viklikani zupinkami 33 Ne mensh vazhlive polipshennya algoritmu ce te sho proektuvannya ne obmezhuyetsya pevnoyu strukturoyu komunikacijnih linij Ce polipshennya dozvolyaye algoritmu buti bilsh shiroko vikoristovuvanim procesorami bagatoh vipuskiv Krim togo algoritm legko rozshiryuyetsya shob vklyuchiti dodatkovi galuzi 182Suchasne zastosuvannyaZa mezhami IBM algoritm Tomasulo ne vikoristovuvavsya protyagom dekilkoh rokiv pislya jogo vprovadzhennya v System 360 Model 91 Prote pochinayuchi z 1990 h rokiv zastosuvannya suttyevo zrostaye z nastupnih prichin Pislya togo yak kesh stav zvichajnoyu spravoyu zdatnist algoritmu Tomasulo pidtrimuvati paralelnist pid chas neperedbachuvanih navantazhen viklikanih kesh promahami stala cinnoyu v procesorah Dinamichne planuvannya i spekulyativne rozgaluzhennya dozvolilo suttyevo pidnyati shvidkodiyu procesoriv Poshirennya programnogo zabezpechennya dlya masovogo rinku sho rozpovsyudzhuyetsya u viglyadi dvijkovogo kodu vipusk riznih versij PZ pid procesori sho vidriznyayutsya strukturoyu konveyera buv nedocilnim v tomu chisli cherez skladnist dlya koristuvachiv sho instalyuyut programu chi ekonomichno nevigidnim Realizaciya pozachergovogo vikonannya komand bezposeredno u procesori dozvolyaye znachnoyu miroyu unifikuvati binarnij kod tonki arhitekturni optimizaciyi yak pravilo roblyatsya lishe u najbilsh kritichnih do shvidkodiyi miscyah programi 183 Bagato suchasnih procesoriv realizuyut dinamichni shemi planuvannya yaki ye pohidnimi vid originalnogo algoritmu Tomasulo v tomu chisli populyarni procesori arhitekturi x86 Primitki ACM Awards ACM Arhiv originalu za 14 grudnya 2014 Procitovano 8 grudnya 2014 Jan 1967 An Efficient Algorithm for Exploiting Multiple Arithmetic Units IBM Journal of Research and Development IBM 11 1 25 33 doi 10 1147 rd 111 0025 ISSN 0018 8646 Hennessy John L Patterson David A 2012 Waltham MA Elsevier ISBN 978 0123838728 PDF washington edu Washington University 2006 Arhiv originalu PDF za 8 lyutogo 2016 Procitovano 8 grudnya 2014 Zvit Intel September 2014 Arhiv originalu za 9 grudnya 2014 Procitovano 8 grudnya 2014 Yoga Adarsh The boozier Arhiv originalu za 17 kvitnya 2016 Procitovano 4 kvitnya 2016 Div takozh en paralelizm na rivni komand Pozachergove vikonannyaPosilannyaDinamichne planuvannya Algoritm Tomasulo 10 bereznya 2014 u Wayback Machine HASE Java aplet modelyuvannya algoritmu Tomasulo 11 veresnya 2013 u Wayback Machine