Karh09 21

21. Методи за ускоряване на процесорният конвейер.


страницата се нуждае от дописване/преглеждане


Подобряване производителността на паметта

1. Отделни портове за данни и инструкции, отделни адресни линии. Това отделяне значи да няма самомодифициращи се кодове. Теоретично една фон нойманова програма може да се направи така, че инструкциите да се модифицират сами. Една инстр може да се използва като данни за друга. Възможно е, но не се препоръчва.
2. Чрез кеша. Кеш от 1-во ниво е високоскоростен. Онези инстр които работят с паметта, данните ако са в кеш от 1-во ниво. Производителността се качва много.
3. Памет с interleaving – едновременно четене на няколко адреса. Ще се повиши достъпа до следващите адреси.
4. Отговорите на инструкцията могат да излязат от подредба. От фон нойманова гледна точка поредицата от инстр трябва да следват достъпа до паметта.

Унифициране на времето за изпълнение

untitled66.JPG
Преборили сме се с достъпа до паметта. Следва унифициране на времето за изпълнение. Времето за изпълнение зависи от типа на операцията която трябва да се изпълни. За да се постигне едно и също време за изпълнение се правят различни функционални блокове. Физически се набутват в процесора най различни устройства за пресмятане. Това се нарича суперскаларна архитектура. Това уеднаквява времето за изпълнение на инструкциите. Въвежда се едно стъпало което е като диспечер.То издава инструкциите за изпълнение към функционалните блокове. То води сметка за това кое устройство работи и кое е празно. Алу-то работи по-бързо от устройствата с плаваща запетая и конвейера трябва да предвиди възможността 2-та инструкция да прескочи първата и това не трябва да се отрази на резултата.
untitled67.JPG
Делението не е на конвейерен принцип. Изчаква се да се свърши работата на делението и тогава се преминава към следващата. При другите устройства може да се подадат по няколко операнда един след друг.
Накрая след като са си свършили работата всички устройства трябва да има точка на обвързване (commit point). От точката на обвързване трябва да излезе първи резултата от това устройство, чиято инструкция е постъпила първа.
Заради изчисляването на информация с типове на данните плаваща запетая или целочислени се въвеждат два блока:untitled68.JPG

Типове на рискове върху данните.

untitled69.JPG
Бинарна операция в/у два регистъра и резултата отива в трети.
1. Масов случай. Смяташ нещо и с резултата от предишната инструкция смяташ нещо друго. Tези две инструкции са зависими по данните. RAW четем след като първата е писала. Ако са извън конвейера нямаме зависимост.
2. r1 се използва като операнд и после в r1 влиза резултат. не се получава често.
3. Първо се пише в r3 и после пак в r3. не се получава често.

Кога издавачът подава на функционалните устройства операндите(кога една операция тръгва да се изпълнява)?
1. когато функционното устройство е свободно
2. ако всички входни данни са готови
3. когато е безопасно да се пише върху крайните резултати.
4. дали няма структурен конфликт на барата на write back

Схема на издавача:

untitled70.JPG

За да се реши проблема с WAR (write after read) и WAW (write after write) се създава един реордер буфер в който се преименуват регистрите. Той събира резултатите от изпълнението на функционалните блокове и ги пуска за commit. За програмиста процесора разполага с 16 регистъра. Предложението е вътре в процесора да има 2 3 пъти повече (вътрешни регистри). Това прави невъзможно появата на раличните рискове. В буфера се слагат инструкците и диспечера ги пуска ако са им готови операндите независимо дали и е дошъл реда или не.
untitled71.JPG
Колко инстукции могат да бъдат в конвейера? Зависи от:
1) броя на регистрите.
2) контролните инструкции.
Precise Interrupts
Ако имаме прекъсване на i-тата инструкция се включва хендлъра , конвейера се изпразва и изпълнението продължава от i+1-та инструкция, или се прекъсва програмата.

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License