Кіріспе

Цифрлық схема

Компьютерлік архитектурада тармақты болжаушы – бұл тармақтың (мысалы, if–then–else конструкциясы) қай бағытқа бұрылатынын нақты белгілі болмас бұрын болжауға тырысатын цифрлық схема. Тармақты болжаушының мақсаты – нұсқаулар конвейеріндегі ағынды жақсарту. Тармақты болжаушылар көптеген қазіргі заманғы конвейерлі микропроцессор архитектураларында жоғары өнімділікке қол жеткізуде маңызды рөл атқарады. Екі тармақты тармақтану әдетте шартты секіру нұсқауларымен іске асырылады. Шартты секіру "орындалуы" мүмкін, яғни бағдарлама жадындағы басқа орынға секіру, немесе "орындалмауы" мүмкін, және шартты секіруден кейін дереу орындауды жалғастыру. Шартты секірудің орындалатыны немесе орындалмайтыны шарт есептелгенге және нұсқау конвейерінде орындау кезеңінен өткенге дейін белгілі емес (1-суретті қараңыз). Тармақты болжау болмаса, процессор келесі нұсқау конвейердегі алу кезеңіне кірмес бұрын шартты секіру нұсқаулары орындау кезеңінен өтуін күтуге мәжбүр болады. Тармақты болжаушы шартты секірудің орындалу ықтималдығын болжауға тырысады. Содан кейін ең ықтимал деп болжанған тармақ алынып, болжамды түрде орындалады. Егер кейіннен болжаудың қате екендігі анықталса, онда болжамды түрде орындалған немесе ішінара орындалған нұсқаулар жойылады және конвейер дұрыс тармақпен қайта басталады, бұл кідіріске әкеледі. Тармақты дұрыс болжамаған жағдайда жоғалған уақыт конвейердегі алу кезеңінен орындау кезеңіне дейінгі кезеңдер санына тең болады. Қазіргі микропроцессорлардың конвейерлері көбінесе өте ұзын болады, сондықтан дұрыс болжамағандағы кідіріс 10 мен 20 сағат циклы арасында болуы мүмкін. Нәтижесінде, конвейерді ұзарту күрделірек тармақты болжаушыға деген қажеттілікті арттырады. Шартты секіру нұсқаулары алғаш рет кездескенде, болжауды негіздеу үшін көп ақпарат болмайды. Бірақ тармақты болжаушы тармақтардың орындалғанын немесе орындалмағанын тіркеп алады. Егер ол бұрын бірнеше рет кездескен шартты секірумен кездессе, онда ол болжамды тарихқа негіздеуге болады. Мысалы, тармақты болжаушы шартты секірудің көбінесе орындалатынын немесе әр екінші рет орындалатынын анықтауы мүмкін. Тармақты болжау, тармақ мақсатын болжаудан өзгеше. Тармақты болжау шартты секірудің орындалатынын немесе орындалмайтынын болжауға тырысады. Тармақ мақсатын болжау, шартты немесе шартсыз секірудің мақсатын оны кодтау және нұсқауды орындау арқылы есептеу алдында болжауға тырысады. Тармақты болжау және тармақ мақсатын болжау көбінесе бір схемаға біріктіріледі.

Статикалық тармақты болжау

Статикалық болжам – ең қарапайым тармақ болжамдау техникасы, себебі ол кодтың динамикалық орындалу тарихы туралы ақпаратқа сүйенбейді. Оның орнына, ол тармақтың нәтижесін тек қана тармақ нұсқауына сүйене отырып болжайды. SPARC және MIPS (алғашқы екі коммерциялық RISC архитектурасы) жүзеге асырылғанда бір бағытты статикалық тармақ болжамдауды қолданды: олар шартты секіру әрқашан орындалмайды деп болжайтын, сондықтан әрқашан келесі тізбекті нұсқауды алатын. Тек тармақ немесе секіру бағаланып, орындалған болып табылған жағдайда ғана нұсқау көрсеткіші тізбексіз мекенжайға орнатылады. Екі процессор да тармақтарды декодтау кезеңінде бағалайды және бір циклді нұсқауды алады. Нәтижесінде, тармақ мақсатының қайталануы екі циклды құрайды, ал машина әрқашан орындалған тармақтан кейін дереу нұсқауды алады. Екі архитектура да осы алынған нұсқауларды пайдалану үшін тармақ кешіктіру орындарын анықтайды. Статикалық болжамның жетілдірілген түрі артқа қарайғы тармақтар орындалатынын, ал алға қарайғы тармақтар орындалмайтынын болжайды. Артқа қарайғы тармақ – бұл мақсатты мекенжайы өзінің мекенжайынан төмен болатын тармақ. Бұл техника циклдардың болжамдау дәлдігіне көмектеседі, себебі циклдар көбінесе артқа қарай бағытталған тармақтар болып табылады және көбінесе орындалады. Кейбір процессорлар кодқа тармақ болжамдау ұсыныстарын енгізуге мүмкіндік береді, осылайша статикалық болжам орындалу керек пе, жоқ па, дегенді анықтауға болады. Intel Pentium 4 тармақ болжамдау ұсыныстарын қабылдайды, бірақ бұл мүмкіндік кейінгі Intel процессорларында қолданылмай қалды. Статикалық болжам кейбір процессорларда динамикалық тармақ болжамдаумен бірге, динамикалық болжамдаушылар жеткілікті ақпаратқа ие болмаған жағдайда, резервтік техника ретінде қолданылады. Motorola MPC7450 (G4e) және Intel Pentium 4 осы әдісті резервтік ретінде пайдаланады. Статикалық болжамда барлық шешімдер бағдарлама орындалуына дейін, компиляция кезінде қабылданады.

Екі деңгейлі болжаушы

Екі деңгейлі тармақ болжаушысы, сонымен қатар корреляцияға негізделген тармақ болжаушысы деп те аталады, екі өлшемді есептегіштер кестесін пайдаланады, бұл кесте "үлгі тарихы кестесі" деп те белгілі. Кестедегі жазбалар екі биттік есептегіштер болып табылады.

Екі деңгейлі бейімделетін болжаушы

Егер if-кестені үш рет орындаса, үшінші орындауда қабылданған шешім алдыңғы екеуінің орындалғанына немесе орындалмағанына байланысты болуы мүмкін. Мұндай жағдайларда екі деңгейлі бейімделу болжаушы қанығу санағыштан тиімдірек жұмыс істейді. Әр екінші рет орындалатын немесе басқа да үлгілі түрде қайталанатын шартты секірулер қанығу санағышымен жақсы болжалмайды. Екі деңгейлі бейімделу болжаушы тармақтың соңғы n оқиғасының тарихын есте сақтайды және әр 2n мүмкін тарих үлгісі үшін бір қанығу санағышын қолданады. Бұл әдіс 3-суретте көрсетілген. n = 2 мысалын қарастырайық. Бұл тармақтың соңғы екі оқиғасы екі биттік ауысу тізілімінде сақталады дегенді білдіреді. Бұл тармақ тарихы тізілімінде төрт түрлі екілік мән болуы мүмкін: 00, 01, 10 және 11, мұнда нөл – "орындалмаған", ал бір – "орындалған" дегенді білдіреді. Үлгі тарихы кестесінде әрбір тармақ үшін төрт жазба бар, олардың әрқайсысы 22 = 4 мүмкін тармақ тарихына сәйкес келеді, ал кестедегі әрбір жазбада әр тармақ үшін 2-суреттегідей екі биттік қанығу санағышы бар. Тармақ тарихы тізілімі төрт қанығу санағышының қайсысын пайдалану керектігін таңдау үшін қолданылады. Егер тарих 00 болса, онда бірінші санағыш қолданылады; егер тарих 11 болса, онда төрт санағыштың соңғысы қолданылады. Мысалы, шартты секіру әр үшінші рет орындалады делік. Бұл жағдайда, үлгі тарихы кестесіндегі 00 нөмірі "қатты орындалған" күйіне өтеді, яғни екі нөлден кейін бір келеді. 01 нөмірі "қатты орындалмаған" күйіне өтеді, яғни 01-ден кейін нөл келеді. 10 нөмірі үшін де осыған ұқсас жағдай орын алады, ал 11 нөмірі ешқашан қолданылмайды, себебі екі бірдің қатары болмайды. n биттік тарихы бар екі деңгейлі бейімделу болжаушының жалпы ережесі – барлық n биттік кіші тізбектер әртүрлі болса, кез келген кезеңдегі кез келген қайталанатын тізбекті болжауға болады. 1991 жылғы алғашқы жарияланудан бері бұл әдіс кең таралды. Бұл болжау әдісінің түрлері қазіргі заманғы микропроцессорлардың көпшілігінде қолданылады.

Екі деңгейлі нейрондық болжаушы

Екі деңгейлі тармақ болжаушысы ұсынылды, онда екінші деңгей нейрондық желімен алмастырылған.

Жергілікті филиалдың болжамы

Жергілікті тармақ болжаушының әр шартты секіру нұсқаулығы үшін жеке тарих буфері болады. Ол екі деңгейлі бейімделетін болжаушыны пайдалана алады. Тарих буфері әрбір шартты секіру нұсқаулығы үшін бөлек, ал үлгі тарихы кестесі де бөлек болуы мүмкін, немесе ол барлық шартты секірулер арасында ортақ болуы мүмкін. Intel Pentium MMX, Pentium II және Pentium III процессорларында жергілікті 4 биттік тарихы және әрбір шартты секіру үшін 16 жазбадан тұратын жергілікті үлгі тарихы кестесі бар жергілікті тармақ болжаушылары қолданылады. SPEC'89 сынақтарында өте үлкен жергілікті болжаушылардың дұрыстығы 97,1%-ға жетеді. Жергілікті және жаһандық болжау принциптерін жергілікті және жаһандық тармақ тарихын біріктіру арқылы үйлестіреді, сондай-ақ бағдарлама санауышынан (program counter) кейбір биттерді қосуға болады. Тәжірибелер VIA Nano процессоры осы техниканы қолдануы мүмкін екенін көрсетеді.

Гибридті болжаушы

Гибридтік болжаушы, сондай-ақ біріктірілген болжаушы деп аталады, бірнеше болжау механизмін іске асырады. Соңғы болжау бұрынғыда ең жақсы болжау жасаған болжаушыларды есте сақтайтын мета-болжаушыға немесе әртүрлі болжаушылардың тақ санына негізделген көпшілік дауыс беру функциясына сүйенеді. Скотт Макфарлинг 1993 жылғы мақаласында біріктірілген тармақ болжауын ұсынды. Intel және AMD компанияларының жаңа процессорлары екі деңгейлі бейімделмелі болжаушыны қолдану арқылы тура емес тармақтарды болжауға мүмкіндік береді. Мұндай нұсқау тарих буферіне бір биттен артық үлес қосады. IBM-нің zEC12 және одан кейінгі z/Architecture процессорлары, берілген нұсқау үшін тармақ болжаушы жазуын, жалпы мақсаттағы тіркеуіштің мазмұнына бірден ығысу мәнін қосу арқылы құрастырылған тармақ мақсатының мекенжайымен алдын ала жүктеуге мүмкіндік беретін нұсқауды қолдайды. Бұл механизмсіз процессорлар тура емес секіруді соңғы реттегідей мақсатқа бару үшін болжайды.