Как съжителстват предикторът на разклоненията и целевият буфер на разклоненията?

Въпросът ми е как те съжителстват и работят заедно в съвременната CPU архитектура?


person fyang29    schedule 02.12.2013    source източник
comment
Защо трябва да си пречат? Първият ви казва дали да прескачате на условни разклонения, вторият ви казва къде да прескачате (на непреки)   -  person Leeor    schedule 02.12.2013
comment
@Leeor Но някак си мисля, че BTB се използва за всяка инструкция, извлечена от I$. И се индексира от компютъра. След като има попадение, няма нужда от предсказание на разклонения и можем да продължим и да извлечем инструкцията на компютъра в BTB. И ако това е пропуск, бранш предсказателят влиза в играта и прогнозира резултата от клона. Като се има предвид, че BTB има честота на попадение над 90%, предикторът за разклонения се използва рядко... Къде греша?   -  person fyang29    schedule 02.12.2013
comment
Искате да използвате стойността в BTB само ако предикторът на клонове казва, че трябва да предвидите, че клонът е зает. Например, ако разклонението е предвидено, взето само за определени стойности от таблицата с хронология на разклоненията (за двустепенен адаптивен предиктор).   -  person Danny    schedule 03.12.2013
comment
@Danny Благодаря! Мисля, че сега има повече смисъл.   -  person fyang29    schedule 03.12.2013


Отговори (1)


Имаш го леко обърнат. При всяко извличане вие ​​индексирате във вашия предсказател на разклонения, който ви казва дали инструкцията, която току-що сте получили, ще бъде декодирана в взето разклоняване. Ако не, извличате следващия пореден адрес. Но ако вашият предиктор на разклонения казва, че това ще бъде взето разклонение, вие не знаете коя инструкция да извлечете следващата, тъй като все още не сте декодирали тази инструкция. Така че, за да не губите цикли в чакане за разрешаване на клона, бихте използвали целеви буфер за клонове (или BTB). BTB съхранява предишни адреси, където клонът е пренасочил контролния поток. Използвайки този механизъм, вие се опитвате да предвидите къде контролният поток ще бъде пренасочен този път. Тази техника има 100% успеваемост за безусловни разклонения, извиквания на функции и връщания, когато е сдвоена със стек от адреси за връщане. При условни разклонения процентът на успех е малко по-нисък, но все още е наистина добър, като се има предвид високата времева локалност на целите на разклоненията. Като пример можете да разгледате обратно разклонение на цикъл, който винаги ще се разклонява на едно и също място.

Когато инструкцията за разклоняване действително бъде разрешена (обикновено в етапа на декодиране или изпълнение на конвейера, в зависимост от изпълнението), вие ще коригирате стойностите както в предиктора на разклонения, така и в BTB, за да имате по-актуална информация за бъдещи прогнози.

Ето картинно обяснение как се извършва търсенето и актуализацията на BTB:

http://www-ee.eng.hawaii.edu/~tep/EE461/Notes/ILP/buffer.html

person Tayyar R    schedule 29.07.2014
comment
+1 Разбира се, реалните реализации могат да бъдат по-сложни. Например, BTB може да не е маркиран или да използва частични тагове, така че има шанс целевата прогноза да се приложи към различен клон (така че дори при безусловен директен скок целта може да бъде неправилно предвидена). Като кеш от целеви прогнози, дори с пълни тагове има потенциал за капацитет и конфликт (ако приемем, че не е напълно асоциативен) пропуски. Индиректните скокове без връщане с множество цели също могат да въведат погрешни прогнози. Дори RAS може да се провали при препълване, превключване на контекста, грешна спекулация на клонове и т.н. - person Paul A. Clayton; 29.07.2014
comment
Имам няколко въпроса. 1) Как предикторът варира между предвиждане за условни разклонения и непреки разклонения, тъй като непрекият има повече възможни адреси за връщане? 2) BTB не е ли разгледан първо, за да се види дали инструкцията е дори клон (за да решите да отидете до предиктора)? 3) Какъв тип погрешно предвиждане на разклонения може да бъде открито на етапа на декодиране? (Знам за реализацията на етапа на изпълнение) - person mezamorphic; 20.01.2015
comment
Хубав отговор! Мисля, че може да има правописна грешка: На безусловни разклонения -› На условни разклонения. - person Carl Cook; 28.10.2017