Кіріспе
Нұсқау деңгейінің параллельділігін жақсарту әдісі + Негізгі бес сатылы құбыр желісі 1 2 3 4 5 6 71IFIDEX MEMWB2IFID EXMEMWB3IF IDEXMEMWB4 IFIDEXMEM5 IFIDEX (IF = Нұсқауды алу, ID = Нұсқауды түсіндіру, EX = Орындау, MEM = Жадына қол жеткізу, WB = Тіркемеге жазу). Төртінші сағат циклында (жасыл бағанда) ең ерте нұсқау MEM сатысында, ал соңғы нұсқау әлі құбыр желісіне кірген жоқ. Компьютерлік инженерияда нұсқаулық құбыржол – бір процессордың ішінде нұсқау деңгейіндегі параллельділікті іске асыру тәсілі. Құбырлау процессордың барлық бөлігін нұсқаумен айналыстыруға тырысады, кіріс нұсқауларды ретті қадамдарға ("құбыр" сериясына) бөліп, оларды әртүрлі процессор бірліктерімен параллель өңдейді.
+Basic five stage pipeline 1 2 3 4 5 6 71IFIDEX MEMWB2IFID EXMEMWB3IF IDEXMEMWB4 IFIDEXMEM5 IFIDEX(IF = Instruction Fetch, ID = Instruction Decode, EX = Execute, MEM = Memory access, WB = Register write back). In the fourth clock cycle (the green column), the earliest instruction is in MEM stage, and the latest instruction has not yet entered the pipeline. In computer engineering, instruction pipelining is a technique for implementing instruction level parallelism within a single processor. Pipelining attempts to keep every part of the processor busy with some instruction by dividing incoming instructions into a series of sequential steps (the eponymous "pipeline") performed by different processor units with different parts of instructions processed in parallel.
Тұжырымдама және мотивация
Құбырлы компьютерде нұсқаулар орталық процессор (CPU) арқылы кезең-кезеңмен өтеді. Мысалы, фон Нейман циклінің әр қадамы үшін бір кезең болуы мүмкін: нұсқауды алу, операндарды алу, нұсқауды орындау, нәтижелерді жазу. Құбырлы компьютерде әр кезеңнен кейін әдетте «құбырлы тіркегіштер» болады. Олар нұсқаулар мен есептеулерден алынған ақпаратты сақтайды, сонда келесі кезеңнің логикалық қақпалары келесі қадамды орындай алады. Бұл жүйе процессорға әрбір сағат циклында бір нұсқауды орындауға мүмкіндік береді. Жұп нөмірлі кезеңдер квадрат толқын сағатының бір жиегінде, ал тақ нөмірлі кезеңдер екінші жиегінде жұмыс істеуі әдеттегі жағдай. Бұл берілген сағаттық жылдамдықта көп циклді компьютерге қарағанда процессордың өнімділігін арттырады, бірақ құбыржол процесінің өзінен туындаған қосымша шығыннан кешігу пайда болуы мүмкін. Сонымен қатар, электронды логиканың ең жоғары жылдамдығы болса да, құбыр желісіндегі кезеңдер санын өзгерту арқылы құбыр желісімен жабдықталған компьютерді жылдамдату немесе баяулатуға болады. Көп кезеңдер болғанда, әр кезең аз жұмыс істейді, сондықтан логикалық қақпалардан кешігу азаяды және жоғары сағаттық жылдамдықпен жұмыс істеуге мүмкіндік туады. Компьютердің құбырлы моделі көбінесе ең экономикалық болып табылады, егер шығын секундқа бір нұсқау үшін логикалық қақпалар саны ретінде өлшенсе. Кез келген сәтте нұсқау бір ғана құбыржол кезеңінде болады және орташа есеппен құбыржол кезеңі көп циклді компьютерге қарағанда арзан. Сонымен қатар, дұрыс жасалса, құбыр желісі бар компьютердің логикасының көп бөлігі көбінесе қолданылады. Ал ретсіз процессорларда кез келген сәтте көп мөлшерде бос логика болуы мүмкін. Осыған ұқсас есептеулер құбыр желісі бар компьютер бір нұсқау үшін аз энергия жұмсайтынын көрсетеді. Алайда, құбыр желісімен жұмыс істейтін компьютер, әдетте, ұқсас көп циклді компьютерге қарағанда күрделірек және қымбат болады. Онда көбінесе логикалық қақпалары, тіркегіштері және күрделірек басқару блогы болады. Сол сияқты, ол жалпы энергияны көбірек пайдалануы мүмкін, бірақ бір нұсқауға аз энергия жұмсайды. Ретсіз процессорлар көбінесе секундқа көбірек нұсқауларды орындай алады, өйткені олар бір уақытта бірнеше нұсқауларды орындай алады. Құбырлы компьютерде басқару блогы бағдарламаның командалары бойынша ағынның басталуын, жалғасуын және тоқтатылуын ұйымдастырады. Нұсқаулық деректері әдетте құбыржол тіркегіштерінде бір кезеңнен келесі кезеңге беріледі, әр кезеңге арналған басқару логикасының шамалы бөлек бөлігімен. Басқару блогы сонымен қатар әрбір кезеңдегі нұсқаулардың басқа кезеңдердегі нұсқаулардың жұмысына зиян келтірмейтіндігін қамтамасыз етеді. Мысалы, егер екі кезең бірдей деректерді пайдалануы керек болса, басқару логикасы пайдаланудың дұрыс реттілікте жасалуын қамтамасыз етеді. Тиімді жұмыс істеген кезде құбыр желісі бар компьютерде әр кезеңде нұсқау болады. Ол барлық нұсқауларды бір уақытта орындайды. Ол әрбір циклде шамамен бір нұсқауды орындай алады. Бірақ бағдарлама басқа нұсқаулар тізбегіне ауысқанда, құбыржол кейде процесс жүріп жатқан деректерді тастап, қайта бастауы керек. Бұл «тоқтау» деп аталады. Құбырлы компьютердің көп бөлігі кезеңдер арасындағы кедергілерді болдырмауға және тоқтауларды азайтуға бағытталған.
Тарих
Құбырлаудың маңызды алғашқы қолданылуы ILLIAC II жобасында және IBM Stretch жобасында болды, бірақ оның қарапайым түрі 1939 жылғы Z1 және 1941 жылғы Z3 есептеу машиналарында одан бұрын қолданылған. Құбырлау 1970 жылдардың соңында векторлық процессорлар және массивтік процессорлар сияқты суперкомпьютерлерде кеңінен қолданыла бастады. Алғашқы суперкомпьютерлердің бірі Control Data Corporation компаниясы құрастырған Cyber сериясы болды. Оның бас архитекторларының бірі Сеймур Крей кейіннен Cray Research компаниясын басқарды. Крей суперкомпьютерлердің XMP желісін жасады, ол көбейту және қосу/азайту операциялары үшін құбырлауды пайдаланды. Кейін Star Technologies Роджер Чен әзірлеген параллелизмді (бірнеше құбырланған функциялардың параллель жұмыс істеуін) қосты. 1984 жылы Star Technologies Джеймс Брэдли жасаған құбырланған бөлу тізбегін енгізді. 1980 жылдардың ортасына қарай құбырлауды әлемнің көптеген компаниялары қолданды. Құбырлау суперкомпьютерлермен ғана шектелмеді. 1976 жылы Amdahl Corporation компаниясының 470 сериялы мақсаттық есептеу машинасы 7 қадамдық құбыр желісімен және патенттелген тармақ болжау схемасымен жабдықталған болды.
Айналадағы амалдар
Кейбір ерте DSP және RISC процессорларындағы құжаттама бағдарламашыларға бір-біріне жақын және өте жақын орналасқан нұсқауларда (кездік слоттар деп аталады) мұндай тәуелділіктерден қашықтауға кеңес береді немесе екінші нұсқаудың қажетті мән емес, ескі мәнді қолданатынын көрсетеді (мысалы, жоғарыдағы жағдайда процессор күтпегендей арттырылмаған мәнді көшіруі мүмкін) немесе ол қолданатын мән анықталмаған деп жариялайды. Бағдарламашы процессордың осы уақыт ішінде орындай алатын басқа жұмысы болуы мүмкін; немесе дұрыс нәтижелерді алу үшін бағдарламашы кодқа NOP нұсқауларын қосуы мүмкін, бұл құбырлы өңдеудің тиімділігін азайтады.
Филиалдар
Қалыпты нұсқаулар тізбегінен тыс тармақталу көбінесе қауіп тудырады. Егер процессор тармаққа бір уақыт циклында қол жеткізе алмаса, құбыр желісі нұсқауларды тізбектей алуын жалғастырады. Бағдарламашы басқаруды бағдарламаның басқа бөлігіне бағытқалыптағандықтан, мұндай нұсқаулардың орындалуына рұқсат етілмейді. Шартты тармақталу одан да қиын мәселе. Процессор тармақталуы мүмкін, ал мүмкін болмайды, бұл әлі орындалмаған есептеулерге байланысты. Әртүрлі процессорлар тоқтап қалуы, тармақтарды болжауға тырысуы немесе екі түрлі бағдарлама тізбегін (күшпен орындау) іске қосуы мүмкін, әрқайсысы тармақ алынған немесе алынбаған деп есептейді, содан кейін дұрыс емес болжауға байланысты барлық жұмысты жояды. Әдетте дұрыс болжамдар жасайтын тармақтарды болжауды іске асыратын процессор тармақтанудан туындаған өнімділік төмендеуін азайта алады. Дегенмен, егер тармақтар дұрыс болжалмаса, процессорға қосымша жұмыс тууы мүмкін, мысалы, дұрыс орындалуды қайта бастамас бұрын, орындалуын бастаған дұрыс емес код жолын құбырдан тазалау қажет болуы мүмкін. Құбырлы процессорлар үшін жазылған бағдарламалар, жылдамдық жоғалуын азайту үшін тармақтанудан әдейі сақтануға тырысады. Мысалы, бағдарламашы әдеттегі жағдайды тізбектей орындау арқылы шеше алады және тек ерекше жағдайларды анықтағанда ғана тармақталуға көше алады. Gcov сияқты бағдарламаларды қолданып код жабуын талдау, бағдарламашыға нақты тармақтардың қаншалықты жиі орындалатынын өлшеуге және кодты оңтайландыру үшін пайдалы ақпарат алуға мүмкіндік береді. Кейбір жағдайларда бағдарламашы әдеттегі және ерекше жағдайларды тармақсыз кодпен шеше алады.
Құбыр желісі бұршағы
Құбырлы процессор қауіптермен күресу үшін тоқтау арқылы және құбыржолда көпіршік жасау арқылы айналысуы мүмкін, нәтижесінде ешқандай пайдалы операция жүрмейтін бір немесе бірнеше циклдар пайда болады. Оң жақтағы суретте 3-ші циклда процессор күлгін нұсқаманы декодтай алмайды, мүмкін, себебі процессор декодтау жасыл нұсқаманың орындалу нәтижелеріне байланысты екенін анықтайды. Жасыл нұсқама жоспарланғандай орындалу сатысына, содан кейін деректерді жазу сатысына өте алады, бірақ күлгін нұсқама Fetch сатысында бір циклға тоқтатылады. 3-ші циклда алынуы тиіс көк нұсқама бір циклға тоқтатылады, сондай-ақ одан кейінгі қызыл нұсқама да. Көпіршік болғандықтан (суреттегі көк түсті овалдар), процессордың декодтау тізбегі 3-ші циклда бос тұрады. Оның орындау тізбегі 4-ші циклда, ал деректерді жазу тізбегі 5-ші циклда бос тұрады. Көпіршік құбырдан шыққанда (6-шы циклда) қалыпты орындалу қайта басталады. Бірақ енді бәрі бір циклге кешіктірілді. Түсті нұсқамалармен көрсетілген төрт нұсқаманы толық орындау үшін 7 емес, 8 цикл (1-ден 8-ге дейінгі циклдар) қажет болады.