Кіріспе
Компьютердің нұсқауларын орындайтын орталық құрылғы
Орталық процессор (CPU), сондай-ақ орталық процессор, негізгі процессор немесе жай ғана процессор деп те аталады, берілген компьютердегі ең маңызды процессор болып табылады. Оның электрондық схемасы компьютерлік бағдарламаның нұсқауларын орындайды, мысалы арифметикалық, логикалық, басқару және кіріс/шығыс (I/O) операцияларын. Бұл рөл негізгі жад және I/O схемасы сияқты сыртқы компоненттермен, сондай-ақ графикалық процессорлар (GPU) сияқты арнайы копроцессорлармен қарама-қайшы келеді. CPU-дың пішіні, дизайны және іске асырылуы уақыт өте келе өзгергенімен, олардың негізгі жұмыс принципі дерлік өзгермеген. CPU-дың негізгі компоненттеріне арифметикалық және логикалық операцияларды орындайтын арифметикалық-логикалық құрылғы (ALU), ALU-ға операндарды жеткізіп, ALU операцияларының нәтижелерін сақтайтын процессор тіркегіштері және ALU-дың, тіркегіштердің және басқа компоненттердің үйлесімді жұмысын басқара отырып, (нұсқауларды) жадтан алуды, декодтауды және орындауды ұйымдастыратын басқару блогы кіреді. Қазіргі заманғы CPU-лар өнімділікті арттыру және операциялық жүйелер мен виртуализацияны қолдау үшін кештерге, нұсқаулар деңгейіндегі параллелизмге және CPU режимдеріне жартылай өткізгіштің үлкен бөлігін бөледі. Көптеген қазіргі заманғы CPU-лар интегралды схема (IC) микропроцессорларында іске асырылады, бір IC чипінде бір немесе бірнеше CPU орналасқан. Бірнеше CPU-ы бар микропроцессорлық чиптер көп ядролы процессорлар деп аталады. Жеке физикалық процессорлар, ядролар деп аталады, сонымен қатар CPU деңгейіндегі көп тізбектілікті қолдау үшін көп тізбекті болуы мүмкін. Мұндай интеграцияланған құрылғылар микроконтроллерлер немесе чиптегі жүйелер (SoC) деп аталады.
Тарих
ENIAC сияқты ерте компьютерлерді әртүрлі тапсырмаларды орындау үшін физикалық түрде қайта сымдау қажет болды, бұл осы машиналарды «қатты бағдарламалық компьютерлер» деп атауға себеп болды. «Орталық процессор» термині 1955 жылдан бері қолданыста. «CPU» термині әдетте бағдарламалық қамтамасыз ету (компьютерлік бағдарлама) орындауға арналған құрылғы ретінде анықталғандықтан, CPU деп атауға лайық ең алғашқы құрылғылар сақталатын бағдарламалық компьютер пайда болғаннан кейін пайда болды. Сақталатын бағдарламалық компьютер идеясы J. Presper Eckert және John William Mauchly-нің ENIAC жобасында болған, бірақ ENIAC-ты жылдамдатылған аяқтау үшін бастапқыда алынып тасталды. 1945 жылдың 30 маусымында, ENIAC салынбас бұрын, математик Джон фон Нейман EDVAC туралы есептің алғашқы нұсқасы атты құжатты таратты. Бұл 1949 жылдың тамызында аяқталатын сақталатын бағдарламалық компьютердің жоспары болды. EDVAC әртүрлі типтегі нұсқауларды (немесе операцияларды) орындау үшін жобаланған. EDVAC үшін жазылған бағдарламалар компьютердің физикалық сымдарымен емес, жоғары жылдамдықты компьютер жадында сақталуы керек еді. Бұл ENIAC-тің үлкен кемшілігін жойды, ол компьютерді жаңа тапсырманы орындау үшін қайта конфигурациялау үшін қажетті маңызды уақыт пен күш-жігер болды. Фон Нейманның жобасымен EDVAC-тің орындайтын бағдарламасын жад мазмұнын өзгерту арқылы өзгертуге болады. EDVAC алғашқы сақталатын бағдарламалық компьютер болған жоқ; Манчестер Бэби, кішкентай тәжірибелік сақталатын бағдарламалық компьютер, өзінің алғашқы бағдарламасын 1948 жылдың 21 маусымында орындады, ал Манчестер Марк 1 өзінің алғашқы бағдарламасын 1949 жылдың 16-17 маусым түнінде орындады. Алғашқы процессорлар үлкен және кейде ерекше компьютерлердің бөлігі ретінде қолданылатын арнайы дизайн болды. Алайда, нақты қолданба үшін арнайы процессорларды жобалаудың бұл әдісі көп мақсатты процессорларды үлкен көлемде өндіруге жол ашты. Бұл стандарттау дискретті транзисторлық мейнфреймдер мен миникомпьютерлер дәуірінде басталды және интегралды схеманың (IC) танымал болуымен жылдамдады. IC күрделі CPU-ларды нанометрлік толеранстылықпен жобалауға және өндіруге мүмкіндік берді. CPU-дың кішірейтілуі және стандартталуы қазіргі заманғы өмірде цифрлық құрылғылардың кең таралған болуына, арнайы есептеу машиналарын қолдану шектеулерінен асып түсуіне әкелді. Қазіргі микропроцессорлар автомобильдерден ұялы телефондарға дейінгі электрондық құрылғыларда, тіпті ойыншықтарда да кездеседі. Фон Нейман EDVAC дизайны үшін сақталатын бағдарламалық компьютер дизайнының авторы ретінде жиі еске алынса да, бұл дизайн фон Нейман архитектурасы ретінде белгілі болды, оған дейін Конрад Цузе сияқты басқалар ұқсас идеяларды ұсынды және жүзеге асырды. EDVAC-тан бұрын аяқталған Гарвард Марк I-дің Гарвард архитектурасы да электрондық жад емес, перфокарта таспасын қолдана отырып, сақталатын бағдарламалық дизайнды қолданды. Фон Нейман және Гарвард архитектураларының арасындағы негізгі айырмашылық - соңғысы CPU нұсқаулары мен деректерін сақтау және өңдеуді бөліп алады, ал біріншісі екеуіне де бірдей жад кеңістігін пайдаланады. Көптеген қазіргі заманғы CPU-лар негізінен фон Нейман дизайнында, бірақ Гарвард архитектурасы бар CPU-лар да кездеседі, әсіресе кіріктірілген қолданбаларда; мысалы, Atmel AVR микроконтроллерлері Гарвард архитектурасы процессорлары болып табылады. Релелер мен вакуумдық түтіктер (термиондық түтіктер) коммутациялық элементтер ретінде кеңінен қолданылды; пайдалы компьютер үшін мыңдаған немесе ондаған мыңдаған коммутациялық құрылғылар қажет. Жүйенің жалпы жылдамдығы коммутаторлардың жылдамдығына байланысты. EDVAC сияқты вакуумдық түтік компьютерлері сәтсіздіктер арасында орташа есеппен сегіз сағатқа созылды, ал релелік компьютерлер - баяу, бірақ бұрынғы Гарвард Марк I - өте сирек сәтсіздікке ұшырады.
Транзисторлы процессорлар
CPU-ның күрделілігі әртүрлі технологиялардың кішірек және сенімді электрондық құрылғыларды құруға мүмкіндік беруімен артты. Бірінші осындай жақсарту транзистордың пайда болуымен болды. 1950-1960 жылдары транзисторлы процессорлар енді вакуумдық түтіктер мен релелер сияқты үлкен, сенімсіз және нәзік коммутациялық элементтерден жасалмайтын болды. Осы жетістіктердің арқасында бір немесе бірнеше дискретті (жеке) компоненттерден тұратын баспа схемалық тақталарға күрделі және сенімді процессорлар орналастырылды. 1964 жылы IBM өзінің IBM System/360 компьютерлік архитектурасын ұсынды, ол әртүрлі жылдамдықтар мен өнімділікпен бірдей бағдарламаларды іске қоса алатын компьютерлер сериясында қолданылды. Бұл сол кезде маңызды оқиға болды, себебі көптеген электрондық компьютерлер бір-бірімен үйлесімсіз болды, тіпті бір өндіруші жасағандары да. Бұл жақсартуды жеңілдету үшін IBM микропрограмма (көбінесе «микрокод» деп аталады) тұжырымдамасын қолданды, ол қазіргі заманғы процессорларда кеңінен қолданылады. System/360 архитектурасы соншалықты танымал болды, ол ондаған жылдар бойына мейнфрейм компьютерлер нарығында басымдық танытты және IBM zSeries сияқты қазіргі заманғы ұқсас компьютерлерге мұра қалдырды. 1965 жылы Digital Equipment Corporation (DEC) ғылыми және зерттеу нарықтарына бағытталған тағы бір ықпалды компьютерді – PDP 8 ұсынды. Транзисторлық компьютерлердің бұрынғыларына қарағанда бірнеше ерекше артықшылықтары болды. Транзисторлар сенімділікті арттырып, электр қуатын аз тұтынудан басқа, құбыр немесе релемен салыстырғанда транзистордың ауысу уақытының қысқа болуына байланысты процессорлардың жоғары жылдамдықпен жұмыс істеуіне мүмкіндік берді. Осы кезеңге дейін коммутациялық элементтердің сенімділігі мен жылдамдығы күрт артты, транзисторлар дерлік эксклюзивті түрде қолданылды; процессордың сағаттық жиілігі ондаған мегагерцке жеңіл жететін болды. Сонымен қатар, дискретті транзисторлар мен интегралды схемалы процессорлар кеңінен қолданылып жүрген кезде, бір нұсқама, бірнеше деректер (SIMD) векторлық процессорлары сияқты жаңа жоғары өнімділік дизайндары пайда бола бастады. Бұл ертедегі тәжірибелік жобалар кейінірек Cray Inc және Fujitsu Ltd компаниялары жасаған арнайы суперкомпьютерлер дәуірін тудырды. Осы «құрылыс блоктары» интегралды схемаларына негізделген процессорлар әдетте «шағын масштабтағы интеграция» (SSI) құрылғылары деп аталады. SSI интегралды схемалары, мысалы, Apollo Guidance Computer-де пайдаланылған, әдетте бірнеше ондаған транзисторларды қамтиды. SSI интегралды схемаларынан толық процессорды құру үшін мыңдаған жеке чиптер қажет болды, бірақ бұрынғы дискретті транзисторлық дизайндарға қарағанда әлдеқайда аз орын мен қуатты жұмсады. IBM-нің System/370 жүйесі, System/360-қа жалғас, Solid Logic Technology дискретті транзистор модульдерінің орнына SSI интегралды схемаларын қолданды. DEC-тің PDP 8/I және KI10 PDP 10 да PDP 8 және PDP 10 қолданған жеке транзисторлардан SSI интегралды схемаларына ауысты, ал олардың өте танымал PDP 11 желісі бастапқыда SSI интегралды схемаларымен жасалды, бірақ олар практикалық болғаннан кейін LSI компоненттерімен іске асырылды.
Үлкен масштабтағы интеграциялық процессорлар
Ли Бойсел 1967 жылы ықпалды мақалалар, соның ішінде "манифест" жариялады, онда салыстырмалы түрде аз сандағы ірі интеграциялық схемалардан (LSI) 32 биттік негізгі компьютерді қалай құруға болатыны сипатталған. Жүз немесе одан да көп қақпалары бар LSI чиптерін жасаудың жалғыз жолы – металл-оксидті жартылай өткізгіш (MOS) жартылай өткізгіш өндіріс процесін (PMOS логикасы, NMOS логикасы немесе CMOS логикасы) қолдану арқылы жасау болатын. Дегенмен, кейбір компаниялар биполярлы транзистор-транзисторлық логикалық (TTL) чиптерінен процессор жасауды жалғастырды, себебі биполярлы қосылыс транзисторлары 1970 жылдарға дейін MOS чиптерінен жылдам болды (Datapoint сияқты бірнеше компания 1980 жылдардың басына дейін TTL чиптерінен процессор жасауды жалғастырды). 1968 жылы Федерико Фаггиннің Fairchild Semiconductor компаниясында кремнийлі қақпалы MOS технологиясын жасауынан кейін, MOS интегралдық схемалары 1970 жылдардың басында стандартты чип технологиясы ретінде екіполярлы TTL-ді алмастырды. Микроэлектрондық технология дамыған сайын интегралдық схемалардағы транзисторлардың саны артты, толық процессор үшін қажетті жеке интегралдық схемалардың саны азайды. MSI және LSI интегралдық схемалары транзисторлардың санын жүздеген, содан кейін мыңдағанға дейін арттырды. 1968 жылға қарай толық процессор жасау үшін қажетті интегралдық схемалардың саны сегіз түрлі типтегі 24 интегралдық схемаға дейін азайды, әрбір схема шамамен 1000 MOSFET-тен тұрды. SSI және MSI-дің алдыңғы нұсқаларымен салыстырғанда, PDP 11-дің алғашқы LSI нұсқасы тек төрт LSI интегралды схемасынан тұратын процессорды қамтыды.
Микропроцессорлар
Микропроцессорлар алғаш рет пайда болғаннан бері, олар барлық басқа орталық процессорларды (CPU) іске асыру әдістерін дерлік толығымен ығыстырды. 1971 жылы шығарылған Intel 4004 – коммерциялық сатылымға түскен алғашқы микропроцессор, ал 1974 жылы шығарылған Intel 8080 – кеңінен қолданыла бастаған алғашқы микропроцессор болды. Сол кездегі мейнфреймдер мен миникомпьютерлерді өндірушілер ескі компьютерлік архитектураларын жаңарту үшін өзіндік интегралды схемаларды (ИС) әзірлеу бағдарламаларын іске қосты және ақырында ескі жабдықтарымен және бағдарламалық қамтамасымен кері үйлесімді нұсқаулар жиынтығына ие микропроцессорларды жасады. Жеке компьютердің кеңінен таралуы және сәттілігінің арқасында, CPU термині қазір көбінесе микропроцессорларға ғана қолданылады. Бірнеше процессорлық ядроны (cores) бір өңдеу чипінде біріктіруге болады. Алдыңғы буын процессорлары дискретті компоненттер түрінде және бір немесе бірнеше басылымды тізбектерде (печатные платы) орналасқан көптеген кішкентай ИС ретінде жасалған. Ал микропроцессорлар, керісінше, өте аз мөлшердегі ИС-те жасалған процессорлар; әдетте, тек біреу ғана. Бір чипке орналастырылуының нәтижесінде CPU-дың жалпы мөлшері кішірейеді, бұл физикалық факторларға байланысты, мысалы, паразиттік сыйымдылықтың төмендеуіне байланысты жылдамрақ коммутация уақытын қамтамасыз етеді. Бұл синхронды микропроцессорларға ондаған мегагерцтен бірнеше гигагерцке дейін сағаттық жиілікті иеленуге мүмкіндік берді. Сонымен қатар, ИС-те өте кішкентай транзисторларды құрастыру мүмкіндігі бір CPU-дағы транзисторлардың күрделілігі мен санын еселеп арттырды. Бұл кеңінен байқалатын үрдіс Мур заңымен сипатталады, ол 2016 жылға дейін CPU (және басқа ИС) күрделілігінің өсуін дұрыс болжады. 1950 жылдан бері CPU-дың күрделілігі, мөлшері, құрылымы және жалпы пішіні өте көп өзгергенімен, негізгі дизайны мен функциясы көбінесе өзгерген жоқ. Бүгінгі таңдағы барлық дерлік кәдімгі CPU-ларды фон Нейманның сақталған бағдарлама машинасы деп дәл сипаттауға болады. Мур заңы енді қолданылмайтындықтан, интегралды схемалардағы транзистор технологиясының шектері туралы алаңдаушылықтар туындады. Электрондық қақпалардың өте кішкентай болуы электрлік миграция және төменгі шектің ағымы сияқты құбылыстардың әсерін күшейтеді. Бұл жаңа алаңдаушылықтар кванттық компьютер сияқты есептеудің жаңа әдістерін зерттеуге, сондай-ақ классикалық фон Нейман моделінің тиімділігін арттыратын параллелизм және басқа да әдістерді пайдалануға итермелейтін көптеген факторлардың бірі болып табылады.
Операция
Көптеген процессорлардың (CPU) негізгі жұмысы, олардың физикалық түріне қарамастан, сақталған нұсқаулар тізбегін орындау болып табылады, бұл бағдарлама деп аталады. Орындалатын нұсқаулар компьютер жадында сақталады. Дерлік барлық процессорлар өз жұмысында нұсқауларды алу, декодтау және орындау қадамдарын орындайды, бұл жиынтығында нұсқау циклі деп танылады. Нұсқау орындалғаннан кейін, бүкіл процесс қайталанады, келесі нұсқау циклі әдетте бағдарлама санағышындағы ұлғайтылған мәнге байланысты кезекті нұсқауды алады. Егер секіру нұсқаулығы орындалса, бағдарлама санағышы секірілген нұсқаудың мекенжайын қамтитын етіп өзгертіледі және бағдарламаның орындалуы қалыпты күйінде жалғасады. Күрделі процессорларда бірнеше нұсқауларды бір уақытта алу, декодтау және орындау мүмкін. Бұл бөлімде көптеген электрондық құрылғыларда (көбінесе микроконтроллерлер деп аталады) қолданылатын қарапайым процессорлар арасында кең таралған «классикалық RISC құбыр жолы» деп аталатын нәрсе сипатталады. Ол негізінен процессор кэшінің маңызды рөлін, демек құбырдың кіру сатысын ескермейді. Кейбір нұсқаулар нәтиже деректерін тікелей шығарудың орнына бағдарлама санағышын басқарады; мұндай нұсқаулар әдетте «секірулер» деп аталады және циклдарды, шартты бағдарламаны орындауды (шартты секіруді пайдалану арқылы) және функциялардың болуын жеңілдетеді. Кейбір процессорларда басқа нұсқаулар «флагтар» тізіліміндегі биттердің күйін өзгертеді. Бұл флагтар бағдарламаның қалай әрекет ететініне әсер етуге қолданылады, өйткені олар әртүрлі операциялардың нәтижесін көрсетеді. Мысалы, мұндай процессорларда «салыстыру» нұсқаулығы екі мәнді бағалайды және флагтар тізіліміндегі биттерді белгілейді немесе тазартады, қайсысы үлкен екенін немесе олар тең екенін көрсету үшін; осы флагтардың біреуін кейінірек бағдарлама ағынын анықтау үшін секіру нұсқаулығы пайдалана алады.
Алып келу
Fetch бағдарламалық жадтан нұсқауды (санмен немесе сандар тізбегімен көрсетілген) алуды қамтиды. Бағдарламалық жадтағы нұсқаудың орны (мекенжайы) бағдарламалық тіркеуішпен (PC; Intel x86 микропроцессорларында "нұсқау көрсеткіші" деп аталады) анықталады, ол келесі алынатын нұсқаудың мекенжайын анықтайтын санды сақтайды. Нұсқау алынғаннан кейін, бағдарламалық тіркеуіш нұсқаудың ұзындығына сәйкес артырылады, осылайша ол тізбектегі келесі нұсқаудың мекенжайын қамтиды. Көбінесе, алынатын нұсқау салыстырмалы түрде баяу жадтан алынуы керек, бұл CPU-дың нұсқау қайтарылғанша күтіп тоқтауына себеп болады. Бұл мәселе қазіргі заманғы процессорларда кэштер және конвейерлік архитектуралар арқылы көбінесе шешіледі (төменде қараңыз).
Декодтау
Процессордың жадтан алатын нұсқауы процессордың не істейтінін анықтайды. Декодерлеу кезеңінде, бинарлық декодерлік схема арқылы орындалатын және нұсқаулық декодері деп танылатын, нұсқау процессордың басқа бөліктерін басқаратын сигналдарға түрлендіріледі. Нұсқаудың түсіндірілу жолы процессордың нұсқаулар жиынтығы архитектурасы (ISA) арқылы анықталады. Көбінесе, нұсқаудың ішіндегі бір биттер тобы (яғни "өріс"), опкод деп аталады, ол орындалуға тиіс операцияны көрсетеді, ал қалған өрістер әдетте операция үшін қажетті қосымша ақпаратты, мысалы, операндарды ұсынады. Бұл операндар тұрақты мән ретінде (тұрақты мән деп аталады) немесе процессор тіркелгісі немесе жад адресі болатын мәннің орналасқан жері ретінде, адрестеу режимінің белгілі бір түрімен анықталуы мүмкін. Кейбір процессорларда нұсқаулық декодері өзгертілмейтін, қатты сымдалған бинарлық декодерлік схема ретінде жүзеге асырылады. Ал басқаларында микропрограмма нұсқауларды процессор конфигурациялық сигналдары жиынтығына аудару үшін қолданылады, бұл сигналдар бірнеше сағаттық импульстар бойы ретті түрде қолданылады. Кейбір жағдайларда микропрограмманы сақтайтын жад қайта жазылатын болып келеді, бұл процессордың нұсқауларды декодтау әдісін өзгертуге мүмкіндік береді.
Орындау
Алып келу және кодтау қадамдарынан кейін орындау қадамы орындалады. CPU архитектурасына байланысты, бұл бір әрекеттен немесе әрекеттер тізбегінен тұруы мүмкін. Әрбір әрекет кезінде басқару сигналдары CPU-ның әртүрлі бөліктерін электрлік түрде қосып немесе өшіріп, қажетті операцияның барлығын немесе бір бөлігін орындауға мүмкіндік береді. Әрекет содан кейін аяқталады, әдетте сағат импульсіне жауап ретінде. Көп жағдайда нәтижелер жылдам қолжетімділік үшін ішкі CPU тіркелгісіне жазылады. Басқа жағдайларда нәтижелер баяурақ, бірақ арзан және көбірек сыйымдылығы бар негізгі жадқа жазылуы мүмкін. Мысалы, егер қосу операциясын орындайтын нұсқау орындалатын болса, қосылатын сандарды (операндарды) сақтайтын тіркелгілер, сондай-ақ қосу операциясын орындайтын арифметикалық-логикалық құрылғының (ALU) бөліктері қосылады. Сағат импульсі келген кезде, операндар бастапқы тіркелгілерден ALU-ға ағылып, оның шығысында қосынды пайда болады. Келесі сағат импульсінде басқа компоненттер қосылып (немесе өшіріліп), шығыс (операцияның қосындысы) сақтауға (мысалы, тіркелгіге немесе жадқа) жылжытылады. Егер алынған қосынды тым үлкен болса (яғни, ALU-дың шығыс сөз өлшемінен асса), келесі операцияға әсер ететін арифметикалық ағын тудыратын белгі қойылады.
Құрылымы мен іске асыруы
CPU-ның схемасына енгізілген негізгі операциялар жиынтығы, нұсқаулар жиынтығы деп аталады. Мұндай операцияларға, мысалы, екі санды қосу немесе алу, екі санды салыстыру, немесе бағдарламаның басқа бөлігіне секіру кіруі мүмкін. Әрбір нұсқау, машина тілінің опкоды деп аталатын биттердің бірегей комбинациясымен көрсетіледі. Нұсқауды өңдеу кезінде, CPU опкодты (бинарлық декодер арқылы) басқару сигналдарына айналдырады, олар CPU-ның жұмысын реттейді. Толық машина тіліндегі нұсқау опкодтан және көп жағдайда операцияның аргументтерін анықтайтын қосымша биттерден тұрады (мысалы, қосу операциясы үшін қосылатын сандар). Күрделілік деңгейінде жоғарылағанда, машина тілі бағдарламасы – CPU орындайтын машина тіліндегі нұсқаулардың жиынтығы. Әрбір нұсқау үшін нақты математикалық операция CPU-ның процессорындағы комбинациялық логикалық тізбек, яғни арифметикалық-логикалық құрылғы (ALU) арқылы орындалады. Жалпы алғанда, CPU нұсқауды жадтан алып, оның ALU-ын пайдаланып операцияны орындайды, содан кейін нәтижені жадқа сақтайды. Бұлың сандар математикасы және логикалық операциялар нұсқауларынан басқа, жадтан деректерді жүктеу және сақтау, тармақтану операциялары, сондай-ақ CPU-ның қозғалатын нүктелік құрылғысы (FPU) орындайтын қозғалатын нүктелі сандар бойынша математикалық операциялар сияқты басқа да машина нұсқаулары бар.
Басқару блогы
Басқару блогы (ББ) – процессордың жұмысын басқаратын процессордың құрауы. Ол компьютердің жадына, арифметикалық және логикалық құрылғысына, сондай-ақ кіріс және шығыс құрылғыларына процессорға жіберілген нұсқауларға қалай жауап беру керектігін түсіндіреді. ББ уақыттық және басқару сигналдарын беру арқылы басқа құрылғылардың жұмысын бағыттайды. Көптеген компьютерлік ресурстар ББ арқылы басқарылады. Ол процессор мен басқа құрылғылар арасындағы деректер ағынын басқарады. Джон фон Нейман басқару блогын фон Нейман архитектурасының құрамына енгізген. Қазіргі заманғы компьютерлерде басқару блогы әдетте процессордың ішкі бөлігі болып табылады және оның негізгі міндеттері мен жұмыс принципі енгізілгеннен бері өзгерген жоқ.
Арифметикалық логикалық бірлік
Арифметикалық-логикалық құрылғы (ALU) – процессор ішіндегі бүтін сандық арифметикалық және биттік логикалық операцияларды орындайтын цифрлық тізбек. ALU-ға енгізілетін деректер – операцияларға түсетін дерек сөздері (операндар деп аталады), бұрынғы операциялардың күйі туралы ақпарат және басқару блогынан қандай операция орындалу керектігін көрсететін код. Орындалып жатқан командаға байланысты операндар ішкі CPU тіркелгіштерінен, сыртқы жадтан немесе ALU-дың өзі генерилеген тұрақтылардан алынуы мүмкін. Барлық кіріс сигналдары орнығып, ALU тізбегі арқылы тарағаннан кейін, орындалған операцияның нәтижесі ALU шығыстарында пайда болады. Нәтиже дерек сөзінен және осы мақсатқа арналған арнайы ішкі CPU тіркелгіште сақталатын күй ақпаратынан тұрады, дерек сөзін тіркелгіште немесе жадта сақтауға болады. Қазіргі заманғы CPU-лар өнімділікті арттыру үшін әдетте бірнеше ALU-ды қамтиды.
Адрестерді құру блогы
Адрестерді құру блогы (AGU), кейде адрестерді есептеу блогы (ACU) деп те аталады, CPU-ның ішіндегі орындау блогы болып табылады және CPU-ның негізгі жадыға қол жеткізу үшін қолданатын адрестерді есептейді. Адрес есептеуін CPU-мен қатар жұмыс істейтін жеке схема арқылы жүргізу арқылы, әртүрлі машиналық нұсқауларды орындау үшін қажетті CPU циклдерінің санын азайтуға болады, бұл өнімділікті арттырады. CPU-лар әртүрлі операцияларды орындау кезінде жадтан деректерді алу үшін қажетті жад адрестерін есептеуі керек; мысалы, массив элементтерінің жадтағы орналасуы CPU деректерді нақты жад орындарынан алу алдында есептелуі тиіс. Адрестерді құру есептеулері әртүрлі бүтін сандық арифметикалық операцияларды қамтиды, мысалы қосу, алу, модульдік операциялар немесе биттерді жылжыту. Көбінесе жад адресін есептеу үшін бірнеше жалпы мақсаттағы машиналық нұсқаулар қажет болады, олар міндетті түрде жылдам түрде кодталмайды және орындалмайды. AGU-ны CPU дизайнына енгізу және AGU-ны пайдаланатын арнайы нұсқауларды қосу арқылы, әртүрлі адрес құру есептеулерін CPU-дың қалған бөлігінен босатуға болады және оларды көбінесе бір CPU циклында жылдам орындауға болады. AGU-ның мүмкіндіктері нақты CPU-ға және оның архитектурасына байланысты. Сондықтан, кейбір AGU-лар көбірек адрес есептеу операцияларын іске асырады және көрсетеді, ал кейбіреулері бір уақытта бірнеше операндтармен жұмыс істей алатын, одан да артық мамандандырылған нұсқауларды қамтиды. Кейбір CPU архитектуралары бірнеше AGU-ны қамтиды, сондықтан бірнеше адрес есептеу операцияларын бір уақытта орындауға болады, бұл озық CPU дизайндарының суперскалярлық сипатына байланысты өнімділікті одан әрі жақсартады. Мысалы, Intel Sandy Bridge және Haswell микроархитектураларына бірнеше AGU-ны енгізеді, бұл бірнеше жадқа қол жеткізу нұсқауларын қатар орындау арқылы CPU жад жүйесінің өткізу қабілетін арттырады.
Жад басқару блогы (MMU)
Көптеген микропроцессорларда (смартфондарда, үстелдік, ноутбуктерде және серверлік компьютерлерде) жад басқару бірлігі болады, ол логикалық адрестерді физикалық RAM адрестеріне түрлендіріп, жадты қорғау және виртуалды жадты пайдалануға мүмкіндік беретін беттеу мүмкіндігін қамтамасыз етеді. Ал қарапайым процессорлар, әсіресе микроконтроллерлер, көбінесе жад басқару бірлігін (MMU) қамтымайды.
Кэші
CPU кэші – компьютердің орталық процессорлық блогының (CPU) негізгі жадтан деректерге қол жеткізудің орташа құнын (уақыт немесе энергия) төмендету үшін қолданатын аппараттық кэш. Кэш – процессор ядросына жақын орналасқан, жиі пайдаланылатын негізгі жадтың орналасқан жерлерінен деректердің көшірмелерін сақтайтын кішкентай, жылдам жад. Көптеген CPU-да әртүрлі тәуелсіз кэштер болады, оның ішінде командалар және деректер кэштері бар, мұнда деректер кэші әдетте кэш деңгейлерінің иерархиясы түрінде ұйымдастырылады (L1, L2, L3, L4 және т.б.). Барлық қазіргі заманғы (жылдам) CPU-ларда (кейбір арнайы ерекшеліктерден басқа) бірнеше деңгейлі CPU кэштері бар. Кэшті алғаш пайдаланған процессорлар тек бір деңгейлі кэшқа ие болды; кейінгі L1 кэштерінен айырмашылығы, ол L1d (деректер үшін) және L1i (командалар үшін) деп бөлінбеген. Қазіргі кездегі кэштері бар процессорлардың басым көпшілігінде бөлінген L1 кэші бар. Олар сондай-ақ L2 кэштеріне және үлкен процессорлар үшін L3 кэштеріне де ие. L2 кэші әдетте бөлінбейді және бұрын бөлінген L1 кэші үшін ортақ репозиторий ретінде қызмет етеді. Көп ядролы процессордың әрбір ядросы арнайы L2 кэшке ие және әдетте ядролар арасында бөліспейді. L3 кэші және жоғары деңгейлі кэштер ядролар арасында бөліседі және бөлінбеген. L4 кэші қазіргі уақытта сирек кездеседі және әдетте статикалық кездейсоқ кіру жадында (SRAM) емес, динамикалық кездейсоқ кіру жадында (DRAM) бөлек матрицада немесе чипте орналасқан. Бұл L1 үшін де тарихи жағдай болды, ал үлкен чиптер оны интеграциялауға және әдетте барлық кэш деңгейлерін, соңғы деңгейден басқа, мүмкіндік берді. Кэштің әрбір қосымша деңгейі көбірек сыйымдылыққа ие және әртүрлі оңтайландырылған. Басқа да кэш түрлері бар (олар жоғарыда аталған ең маңызды кэштердің «кэш көлеміне» есептелмейді), мысалы, көптеген CPU-да бар жад басқару блогының (MMU) бөлігі болып табылатын трансляциялық іздеу буфері (TLB). Кэштер әдетте екінің дәрежесімен өлшенеді: 2, 8, 16 және т.б. KiB немесе MiB (үлкен, L1 емес өлшемдер үшін), бірақ IBM z13 96 KiB L1 командалар кэшіне ие.
Сағат жылдамдығы
Көптеген процессорлар синхронды схемалар болып табылады, яғни олар тізбекті операцияларын жылдамдату үшін сағат сигналын пайдаланады. Сағат сигналын сыртқы осциллятор (қозғалтқыш) тізбегі шығарады, ол әр секунд сайын тұрақты сандағы импульстарды мезгілдік тіктөртбұрышты толқын түрінде жасайды. Сағат импульстарының жиілігі процессордың нұсқауларды орындау жылдамдығын анықтайды, сондықтан сағат неғұрлым жылдам болса, процессор әр секунд сайын соғұрлым көп нұсқауларды орындайды. Процессордың дұрыс жұмыс істеуін қамтамасыз ету үшін сағат периоды барлық сигналдардың процессор арқылы таралуына (қозғалуына) қажетті ең ұзақ уақыттан ұзақ болуы керек. Сағат периодын ең нашар жағдайда таралудың кешігуінен жоғарырақ мәнге орнату арқылы, процессордың барлық бөліктерін және оның деректерді сағат сигналының өрлеу және төмендеу "шектерінде" жылжытуын жобалауға болады. Бұл процессорды дизайн және компоненттер саны тұрғысынан айтарлықтай жеңілдетуге мүмкіндік береді. Дегенмен, бұл процессордың ең баяу элементтерін күтуді қажет етеді, тіпті оның кейбір бөліктері әлдеқайда жылдам болса да. Бұл шектеу көбінесе процессордың параллелизмді арттырудың әртүрлі әдістерімен толықтырылады (төменде қараңыз). Алайда, архитектуралық жақсартулар ғана жаһандық синхронды процессорлардың барлық кемшіліктерін шешпейді. Мысалы, сағат сигналы басқа кез келген электр сигналының кешігуіне ұшырайды. Күрделі процессорлардағы жоғары сағат жылдамдықтары сағат сигналын бүкіл құрылым бойынша синхронды (фазада) ұстауды қиындатады. Бұл көптеген заманауи процессорларға бірнеше бірдей сағат сигналдарын беруді қажет етеді, бұл бір сигналдың процессордың жұмысын бұзуға жеткілікті кешігуіне жол бермейді. Сағат жылдамдықтары күрт өскенде тағы бір маңызды мәселе – процессордың бөліп шығаратын жылу мөлшері. Үнемі өзгеретін сағат көптеген компоненттердің сол уақытта қолданылып жатқан-жатпағанына қарамастан, ауысуына себеп болады. Әдетте, ауысып тұрған компонент статикалық күйдегі элементке қарағанда көбірек энергия жұмсайды. Сондықтан сағат жылдамдығы артқан сайын энергия тұтыну да артады, процессордың жылуды таратуын қажет етеді, мысалы, процессорды салқындату жүйелері арқылы. Қажетсіз компоненттердің ауысуын шешудің бір әдісі – сағаттық қақпа (clock gating), ол қажетсіз компоненттерге сағат сигналын өшіруді (фактически оларды істен шығаруды) қамтиды. Алайда, мұны іске асыру қиын деп есептеледі, сондықтан өте төмен қуатты дизайннан басқа жерде кеңінен қолданылмайды. Жақында сағаттық қақпаны кеңінен пайдаланатын бір процессор дизайны – Xbox 360-та қолданылатын IBM PowerPC негізіндегі Xenon; бұл Xbox 360-тың қуат талаптарын азайтады.
Сағатсыз процессорлар
Глобалды сағат сигналының кейбір мәселелерін шешудің тағы бір жолы – сағат сигналын толығымен жою. Глобалды сағат сигналын жою жобалау процесін көптеген жағынан едәуір күрделендіреді, бірақ асинхронды (немесе сағатсыз) жобалар ұқсас синхронды жобалармен салыстырғанда қуат тұтыну және жылуды тарату бойынша айқын артықшылықтарға ие. Көбінесе сирек кездессе де, толық асинхронды процессорлар (CPU) жаһандық сағат сигналынсыз құрастырылған. Бұған екі белгілі мысал – ARM стандартына сәйкес AMULET және MIPS R3000 үйлесімді MiniMIPS. Сағат сигналын толығымен жоюдың орнына, кейбір процессорлардың дизайны құрылғының белгілі бір бөліктерін асинхронды етуге мүмкіндік береді, мысалы, асинхронды арифметикалық құрылғыларды (ALU) суперскалярлық конвейермен бірге қолдану арқылы арифметикалық өнімділіктің кейбір артықшылықтарына қол жеткізуге болады. Толық асинхронды жобалар өздерінің синхронды әріптестерімен салыстырылатын немесе олардан жақсы жұмыс істей алатыны толығымен белгілі емес, бірақ олар кемінде қарапайым математикалық операцияларда өте жақсы екені анық. Бұл, олардың тамаша қуат тұтыну және жылуды тарату қасиеттерімен бірігіп, оларды кіріктірілген компьютерлер үшін өте ыңғайлы етеді.
Кернеуді реттеу модулі
Көптеген заманауи процессорларда (CPU) талап бойынша процессор тізбектеріне қуат беруді реттейтін кіріктірілген қуат басқару модулі болады, бұл оларға өнімділік пен қуат тұтыну арасындағы тепе-теңдікті сақтауға мүмкіндік береді.
Бүкіл сандар диапазоны
Әрбір CPU сандық мәндерді әлдебір жолмен ұсынады. Мысалы, кейбір ерте цифрлық компьютерлер сандарды біз таныс ондық (10-дық) сандар жүйесінде көрсеткен, ал басқалары үштік (3-тік) сияқты ерекше ұсыну тәсілдерін қолданған. Көбінесе қазіргі заманғы CPU-лар сандарды екілік түрде ұсынады, онда әр цифр «жоғары» немесе «төмен» кернеу сияқты екі мәнді физикалық шамамен бейнеленеді. Сандарды ұсынумен байланысты – CPU ұсына алатын бүтін сандардың мөлшері мен дәлдігі. Екілік CPU үшін бұл CPU бір операцияда өңдей алатын биттер санымен (екілік кодталған бүтін санның маңызды цифрлары) өлшенеді, бұл көбінесе сөз мөлшері, бит ені, дерек жолының ені, бүтін санның дәлдігі немесе бүтін санның мөлшері деп аталады. CPU-дың бүтін санның мөлшері, ол тікелей жұмыс істей алатын бүтін сан мәндерінің диапазонын анықтайды. Мысалы, 8 биттік CPU тікелей сегіз битпен ұсынылған бүтін сандарды, яғни 256 (2⁸) дискретті бүтін сан мәндерінің диапазонын өңдей алады. Бүтін сан диапазоны CPU тікелей қамти алатын жад орындарының санына да әсер етеді (адрес – бұл нақты жад орнын білдіретін бүтін сан). Мысалы, егер екілік CPU жад адресін ұсыну үшін 32 бит қолданса, онда ол тікелей 2³² жад орнын қамти алады. Бұл шектеуді айналып өту үшін және басқа да себептермен кейбір CPU-лар қосымша жадты қолдануға мүмкіндік беретін механизмдерді (мысалы, банктерді ауыстыру) қолданады. Үлкен сөз мөлшері бар CPU-лар көбірек схемаларды қажет етеді, сондықтан олар физикалық жағынан үлкен, қымбатқа түседі және көбірек қуатты тұтынады (соның салдарынан, көбірек жылу бөледі). Сондықтан, 4 немесе 8 биттік микроконтроллерлер қазіргі қолданбаларда жиі қолданылады, бірақ үлкен сөз мөлшері бар (мысалы, 16, 32, 64, тіпті 128 бит) CPU-лар да бар. Дегенмен, жоғары өнімділік қажет болған жағдайда, үлкен сөз мөлшерінің (үлкен дерек диапазондары мен жад кеңістіктері) артықшылықтары кемшіліктерден басым болуы мүмкін. CPU өлшем мен құнын азайту үшін сөз мөлшерінен кішірек ішкі дерек жолына ие болуы мүмкін. Мысалы, IBM System/360 командалар жиынтығы архитектурасы 32 биттік болғанымен, System/360 Model 30 және Model 40 арифметикалық-логикалық құрылымында 8 биттік дерек жолы болды, сондықтан 32 биттік қосу үшін төрт цикл қажет болды, әрқайсысы 8 биттік операндтар үшін. Motorola 68000 сериясы командалар жиынтығы 32 биттік болғанымен, Motorola 68000 және Motorola 68010 арифметикалық-логикалық құрылымында 16 биттік дерек жолы болды, сондықтан 32 биттік қосу үшін екі цикл қажет болды. Төменгі және жоғары бит ұзындығының артықшылықтарын пайдалану үшін көптеген командалар жиынтықтарында бүтін сандар мен қалқымалы нүктелік деректер үшін әртүрлі бит ені қарастырылған, бұл сол командалар жиынтығын іске асыратын CPU-ларға құрылғының әртүрлі бөліктері үшін әртүрлі бит еніне ие болуға мүмкіндік береді. Мысалы, IBM System/360 командалар жиынтығы негізінен 32 биттік болды, бірақ қалқымалы нүктелік сандардың үлкен дәлдігі мен диапазонын қамтамасыз ету үшін 64 биттік қалқымалы нүктелік мәндерді қолдады. Көптеген кейінгі CPU дизайндары ұқсас аралас бит енін қолданады, әсіресе процессор жалпы мақсатта қолдануға арналған жағдайда, онда бүтін сандар мен қалқымалы нүктелік мүмкіндіктердің орынды тепе-теңдігі қажет.
Нұсқаулық деңгейіндегі параллельдік
Паралельділікті арттырудың ең қарапайым әдістерінің бірі – алдыңғы нұсқау орындалуын аяқтамай тұрып, нұсқауды алу және декодтаудың алғашқы қадамдарын бастау. Бұл нұсқаулық құбыржол деп аталатын техника, және ол дерлік барлық қазіргі заманғы жалпы мақсаттағы процессорларда қолданылады. Құбыржол орындалу жолын дискретті сатыларға бөлу арқылы бірнеше нұсқаудың бір уақытта орындалуына мүмкіндік береді. Бұл бөліністі конвейерлік желіге теңеуге болады, онда нұсқау әр сатыда толықтырылып, орындау құбырынан шығып, тоқтатылады. Дегенмен, құбыржол келесі операцияны аяқтау үшін алдыңғы операцияның нәтижесі қажет болатын жағдайды тудырады; мұндай жағдай көбінесе деректердің тәуелділік қақтығысы деп аталады. Сондықтан, құбыржолды процессорлар мұндай жағдайларды тексеріп, қажет болған жағдайда құбыржолдың бір бөлігін тоқтатуы керек. Құбыржолды процессор құбыржолдағы тоқтауларға (бір сатыда бір сағаттан артық уақыт жұмсайтын нұсқау) байланысты ғана шектеліп, скалярлыққа жақын болуы мүмкін. Нұсқаулық құбыржолды жақсарту процессор компоненттерінің бос тұру уақытын одан әрі қысқартуға әкелді. Суперскалярлы деп аталатын жобалар ұзақ нұсқаулық құбырды және бірнеше бірдей орындау бірліктерін қамтиды, мысалы, жүктеу-сақтау бірліктері, арифметикалық-логикалық бірліктер, қозғалатын нүктелік бірліктер және мекенжай генерациялау бірліктері. Суперскалярлық құбыржолда нұсқаулар оқылып, диспетчерге жіберіледі, ол нұсқауларды параллель (бір уақытта) орындауға бола ма, жоқ па, соны шешеді. Егер болатын болса, олар орындау бірліктеріне жіберіледі, нәтижесінде бір уақытта орындалады. Жалпы алғанда, суперскалярлы процессордың бір циклде орындайтын нұсқаулар саны оның орындау бірліктеріне бір уақытта жібере алатын нұсқаулар санына байланысты. Суперскалярлы процессор архитектурасын жобалаудағы қиындықтардың көп бөлігі тиімді диспетчерді құруда жатыр. Диспетчер нұсқауларды параллель орындауға болатынын жылдам анықтап, оларды мүмкіндігінше көп орындау бірліктерін жұмыспен қамту үшін жібере білуі керек. Бұл нұсқаулық құбыржолды мүмкіндігінше жиі толтыруды және процессор кэшінің жеткілікті көлемін талап етеді. Сондай-ақ, жоғары өнімділікті сақтау үшін тармақтарды болжау, спекулятивті орындау, тізілімдерді қайта атау, реттіліктен тыс орындау және транзакциялық жад сияқты қауіптерден сақтану техникалары маңызды. Шартты нұсқаудың қай тармағын (немесе жолын) таңдауын болжау арқылы процессор шартты нұсқау аяқталғанша бүкіл құбырдың күту уақытын азайта алады. Спекулятивті орындау шартты операция аяқталғаннан кейін қажет болмайтын кодтың бөліктерін орындау арқылы өнімділікті шамалы арттырады. Ретсіз орындау деректерге тәуелділіктерге байланысты кешігуді азайту үшін нұсқаулардың орындалу ретін өзгертпек. Сондай-ақ, бір нұсқау ағыны, көптеген деректер ағыны жағдайында, бір типтегі көптеген деректерді өңдеу қажет болғанда, қазіргі заманғы процессорлар құбыржолдың бөліктерін өшіре алады, сондықтан бір нұсқау бірнеше рет орындалғанда процессор алу және декодтау сатыларын өткіріп жіберіп, кейбір жағдайларда, әсіресе бейне және фото өңдеу сияқты біркелкі бағдарламалық қозғалтқыштарда өнімділікті арттырады. Процессордың бір бөлігі суперскалярлы болған кезде, оған байланыссыз бөлігі кестелеу тоқтауларына байланысты өнімділік жоғалтуы мүмкін. Intel P5 Pentium екі суперскалярлық ALU-ға ие болды, олардың әрқайсысы бір сағат циклында бір нұсқауды қабылдай алатын, бірақ оның FPU-сы мұндай мүмкіндікке ие болмады. Осылайша P5 бүтін сандық суперскалярлы, бірақ қозғалатын нүктелік суперскалярлы емес. Intel компаниясының P5 архитектурасының ізбасары P6, өзінің қозғалатын нүктелік мүмкіндіктеріне суперскалярлық қабілеттерді қосты. Қарапайым құбыржол және суперскалярлық жоба процессордың ILP-ін сағат циклына бір нұсқаудан асып түсетін жылдамдықпен нұсқауларды орындауға мүмкіндік беру арқылы арттырады. Көптеген қазіргі заманғы процессорлар кем дегенде біршама суперскалярлы, ал соңғы он жылда жасалған барлық жалпы мақсаттағы процессорлар суперскалярлы. Кейінгі жылдары жоғары ILP процессорларын жобалаудағы басымдық процессордың аппараттық жағынан оның бағдарламалық интерфейсіне немесе нұсқаулар жиынтығы архитектурасына (ISA) ауыстырылды. Өте ұзақ нұсқау сөзі (VLIW) стратегиясы кейбір ILP-ді бағдарламалық қамтамасыз ету арқылы тікелей білдіреді, бұл процессордың ILP-ні арттыру жұмысын азайтады және осылайша жобалаудың күрделілігін төмендетеді.
Тапсырмалар деңгейіндегі қатарлас жүйе
Өнімділікке қол жеткізудің тағы бір стратегиясы – бірнеше жіптерді немесе процестерді параллель түрде орындау. Бұл зерттеу саласы параллель есептеу деп аталады. Флинн таксономиясында бұл стратегия көп нұсқау ағыны, көп дерек ағыны (MIMD) ретінде белгілі. Бұл мақсатта қолданылатын технологиялардың бірі – көппроцессорлық (MP). Бұл технологияның бастапқы түрі симметриялық көппроцессорлық (SMP) деп аталады, онда шағын саны процессорлар жад жүйесінің біртұтас көрінісін бөліседі. Бұл схемада әрбір процессорда жадтың үнемі жаңартылып отыратын көрінісін сақтау үшін қосымша аппараттық құралдар бар. Жадтың ескірген көріністерін болдырмау арқылы процессорлар бір бағдарлама бойынша ынтымақтаса жұмыс істей алады және бағдарламалар бір процессордан екіншісіне көшірілуі мүмкін. Бірлесіп жұмыс істейтін процессорлардың санын бірнешеден асыру үшін 1990 жылдары біркелкі емес жадқа қол жеткізу (NUMA) және каталог негізіндегі үйлесімділік протоколдары сияқты схемалар енгізілді. SMP жүйелері процессорлардың шағын санымен шектеледі, ал NUMA жүйелері мыңдаған процессорлармен құрылған. Бастапқыда көппроцессорлық жүйелер бірнеше дискретті процессорлар мен процессорлар арасындағы байланысты жүзеге асыру үшін тақшаларды пайдалана отырып құрылды. Процессорлар мен олардың байланысы бір чипте іске асырылғанда, технология чип деңгейіндегі көппроцессорлық (CMP) деп аталады, ал бір чип көп ядролы процессор ретінде танылады. Кейіннен бір бағдарламада ұсақ дәнді параллелизмнің бар екені анықталды. Бір бағдарламада бірнеше жіптер (немесе функциялар) болуы мүмкін, олар жеке немесе параллель түрде орындалуы мүмкін. Бұл технологияның алғашқы мысалдарының кейбіреулері кіріс-шығыс өңдеуін, мысалы тікелей жадқа қол жеткізуді есептеу жіптерінен бөлек жіп ретінде іске асырды. Бұл технологияға жалпылама тәсіл 1970 жылдары енгізілді, онда жүйелер бірнеше есептеу жіптерін параллель түрде орындауға арналған. Бұл технология көпжіптілік (MT) деп аталады. Бұл тәсіл көппроцессорлыққа қарағанда тиімдірек деп есептеледі, себебі MT үшін процессордың ішіндегі шағын компоненттер ғана қайталанады, ал MP жағдайында бүкіл процессор қайталанады. MT-де орындау бірліктері мен кэштерді қоса алғандағы жад жүйесі бірнеше жіптер арасында бөліседі. MT-нің кемшілігі – көпжіптілікке қолдау бағдарламалық құралдар үшін MP-ге қарағанда көрінеуірек, сондықтан операциялық жүйелер сияқты қадағалау бағдарламалық құралдарына MT-ні қолдау үшін үлкен өзгерістер енгізу қажет. MT-нің бір түрі уақытша көпжіптілік деп аталады, онда бір жіп сыртқы жадтан деректерді күтіп тұрып тоқтағанға дейін орындалады. Бұл схемада процессор кейіннен басқа жіпке ауысады, ол орындалуға дайын, ауысу көбінесе бір процессор сағаттық циклында жасалады, мысалы UltraSPARC T1. МТ-нің тағы бір түрі – бір мезгілде көпжіптілік, онда бір процессор сағаттық циклында бірнеше жіптерден нұсқаулар параллель түрде орындалады. 1970 жылдардан бастап 2000 жылдардың басына дейінгі бірнеше онжылдықтар бойы жоғары өнімділіктегі жалпы мақсаттағы процессорларды жобалауда негізінен құбыржол, кэш, суперскалярлық орындау, ретсіз орындау және т.б. сияқты технологиялар арқылы жоғары ILP-ге қол жеткізуге бағытталды. Бұл үрдіс үлкен, қуатты процессорларға, мысалы Intel Pentium 4-ке әкелді. 2000 жылдардың басында процессор дизайнерлері CPU жиілігі мен негізгі жад жиілігі арасындағы айырмашылықтың өсуіне және ILP-нің эзотерикалық техникаларына байланысты CPU қуатты тұтынуының артуына байланысты ILP техникасынан жоғары өнімділікке қол жеткізуге кедергілерге тап болды. CPU дизайнерлері коммерциялық есептеу нарықтарынан, мысалы транзакцияларды өңдеуден идеяларды алды, онда бірнеше бағдарламалардың жиынтық өнімділігі, сонымен қатар өткізу қабілеті деп аталады, бір жіп немесе процестің өнімділігінен маңыздырақ болды. Бұл басымдықтың өзгеруі екі және одан да көп ядролы процессорлардың дизайнының көбеюімен және атап айтқанда, Intel-дің жаңа дизайндары оның аз суперскалярлы P6 архитектурасына ұқсас. Бірнеше процессорлар отбасындағы соңғы жобалар CMP-ді көрсетеді, соның ішінде x86 64 Opteron және Athlon 64 X2, SPARC UltraSPARC T1, IBM POWER4 және POWER5, сондай-ақ бірнеше бейне ойын консоль процессорлары, мысалы Xbox 360-тың үш ядролық PowerPC дизайны және PlayStation 3-тің 7 ядролық Cell микропроцессоры.
Деректердің параллельділігі
Процессорлардың (әрине, жалпы есептеулерде) сирек кездесетін, бірақ маңыздылығы артып келе жатқан парадигмасы деректердің параллельдігімен айналысады. Бұрын талқыланған процессорлардың бәрі скалярлық құрылғылардың бір түрі ретінде қарастырылады. Аты айтқандай, векторлық процессорлар бір команданың шеңберінде бірнеше дерек бөлігін өңдейді. Бұл, әрбір команда үшін бір дерек бөлігімен жұмыс істейтін скалярлық процессорлардан өзгеше. Флинн таксономиясын қолдана отырып, деректерді өңдеудің осы екі тәсілі, әдетте, бір команда ағыны, көп дерек ағыны (SIMD) және бір команда ағыны, бір дерек ағыны (SISD) деп аталады. Дерек векторларымен жұмыс істейтін процессорларды құрудың басты артықшылығы, бір операцияны (мысалы, қосынды немесе векторлық көбейтінді) үлкен дерек жиынтығына қолдануды қажет ететін тапсырмаларды оңтайландыруда. Осындай тапсырмалардың классикалық мысалдары мультимедиа қолданбалары (суреттер, бейне және дыбыс), сондай-ақ көптеген ғылыми және инженерлік есептеулерді қамтиды. Егер скалярлық процессор дерек жиынтығындағы әрбір команда мен мәнді алу, декодтау және орындау процесін толық аяқтауы керек болса, векторлық процессор салыстырмалы түрде үлкен дерек жиынтығында бір командамен бір операцияны орындай алады. Бұл тек қана қолданба көптеген қадамдарды қажет ететін жағдайда ғана мүмкін болады, мұнда бір операция үлкен дерек жиынтығына қолданылады. Cray 1 сияқты алғашқы векторлық процессорлардың көпшілігі ғылыми зерттеулермен және криптографиялық қолданбалармен тығыз байланысты болды. Алайда, мультимедианың цифрлық форматқа көшуіне байланысты, жалпы мақсаттағы процессорларда SIMD-дің қандай да бір түріне қажеттілік арта түсті. Жалпы мақсаттағы процессорларда қозғалатын нүктелік операцияларды орындаушы блоктардың енгізілуінен кейін, SIMD орындаушы блоктардың спецификациялары мен іске асырылуы да жалпы мақсаттағы процессорлар үшін пайда бола бастады. Осы SIMD-дің алғашқы спецификацияларының кейбіреуі – HP-нің Multimedia Acceleration eXtensions (MAX) және Intel-дің MMX – тек бүтін сандармен жұмыс істеді. Бұл кейбір бағдарламалық жасақтаманы әзірлеушілер үшін елеулі кедергі болды, себебі SIMD-ден пайда көретін көптеген қолданбалар негізінен қозғалатын нүктелік сандармен жұмыс істейді. Уақыт өте келе, әзірлеушілер осы бастапқы жобаларды жетілдіріп, қазіргі заманғы SIMD спецификацияларына айналдырды, олар әдетте бір команда жиынтығы архитектурасымен (ISA) байланысты. Осы заманауи мысалдардың ішінде Intel-дің Streaming SIMD Extensions (SSE) және PowerPC-ге байланысты AltiVec (VMX деп те аталады) бар.
Жабдықтың жұмыс істеуін есептегіш
Көптеген заманауи архитектуралар (соның ішінде кіріктірілгендер) көбінесе аппараттық өнімділік есептегіштерін (HPC) қамтиды, олар төменгі деңгейде (нұсқау деңгейінде) мәліметтерді жинақтауға, бағалауға, жөндеуге немесе жұмыс істеп жатқан бағдарламалық қамтамасыз ету метрикаларын талдауға мүмкіндік береді. HPC бағдарламалық жасақтаманың қалыптан тыс немесе күдікті әрекеттерін, мысалы, қайтаруға бағытталған бағдарламалау (ROP) немесе sigreturn-ға бағытталған бағдарламалау (SROP) сияқты шабуылдарын анықтау және талдау үшін де қолданылуы мүмкін. Мұны әдетте бағдарламалық қамтамасыз ету қауіпсіздігі командалары зиянды екілік бағдарламаларды бағалау және табу үшін жасайды. Көптеген ірі өндірушілер (мысалы, IBM, Intel, AMD және Arm) CPU регистрлерінен деректерді жинау арқылы метрикаларды алуға болатын бағдарламалық интерфейстерді (әдетте C/C++ тілінде жазылған) ұсынады. Операциялық жүйелер өндірушілері де perf (Linux) сияқты бағдарламалық қамтамасыз етуді ұсынады, ол ядролар мен қолданбаларды іске қосу кезіндегі процессор оқиғаларын жазуға, бағалауға немесе іздеуге мүмкіндік береді. Аппараттық есептегіштер CPU-дың негізгі элементтеріне (функционалдық бірліктер, кэштер, негізгі жад және т.б.) қатысты толыққанды өнімділік метрикаларын жинаудың төмен шығынды әдісін ұсынады – бұл бағдарламалық профильдеуге қарағанда маңызды артықшылық. Сонымен қатар, олар бағдарламаның бастапқы кодын өзгерту қажеттілігін жояды. Аппараттық құрылымдар архитектуралар арасында өзгеше болғандықтан, аппараттық есептегіштердің нақты түрлері мен интерпретациясы да өзгереді.
Артықшылық режимдер
Қазіргі заманғы процессорлардың көпшілігі операциялық жүйелерді және виртуализацияны қолдау үшін артықшылықты режимдерге ие. Бұлтты есептеулер жеке пайдаланушыларға арналған виртуалды орталық процессорларды (vCPU) ұсыну үшін виртуализацияны пайдалана алады. Хост – виртуалды жүйенің жұмыс істейтін физикалық машинаның виртуалды баламасы. Егер бірнеше физикалық машина бірлесіп жұмыс істеп, біртұтас басқарылса, онда біріккен есептеу және жад ресурстары кластерді құрайды. Кейбір жүйелерде кластерге динамикалық түрде ресурстар қосу және алып тастау мүмкіндігі бар. Хост және кластер деңгейіндегі қолжетімді ресурстарды ұсақ бөліктерге бөлуге болады.
Өнер көрсету
Процессордың өнімділігі немесе жылдамдығы, көптеген факторлардың қатарында, сағаттық жиілікке (әдетте герцтің еселігінде беріледі) және сағатқа орындалатын нұсқаулар санына (IPC) байланысты. Бұл екеуі бірге процессордың секунд ішінде орындай алатын нұсқаулар санының (IPS) көрсеткішін анықтайды. Көптеген жарияланған IPS мәндері жасанды нұсқаулар тізбектеріндегі "жоғарғы" орындау жылдамдықтарын көрсетеді, мұнда тармақталулар аз. Ал нақты жұмыс жүктемелері әртүрлі нұсқаулар мен қосымшалардан тұрады, олардың кейбіреулерін орындау басқаларына қарағанда ұзаққа созылуы мүмкін. Память иерархиясының өнімділігі де процессордың өнімділігіне зор әсер етеді, бірақ бұл мәселе IPS есептеулерінде көбінесе ескерілмейді. Осы мәселелерге байланысты, нақты қолданыстағы қосымшалардағы нақты өнімділікті өлшеу үшін SPECint сияқты, әртүрлі стандартталған сынақтар, көбінесе "бенчмарктар" деп аталады, әзірленді. Компьютерлердің өңдеу өнімділігін арттыру үшін көп ядролы процессорларды пайдалануға болады. Бұл, негізінен, екі немесе одан да көп жеке процессорды (осы мағынада ядролар деп аталады) бір интегралдық схемаға орнатуды білдіреді. Идеалды жағдайда, екі ядролы процессор бір ядролы процессордан шамамен екі есе қуатты болуы керек. Бірақ іс жүзінде өнімділік артуы әлдеқайда аз, шамамен 50% ғана, себебі бағдарламалық жасақтаманың жетілмеген алгоритмдері мен іске асырылуына байланысты. Процессордағы ядролардың санын арттыру (мысалы, екі ядролы, төрт ядролы және т.б.) өңделуге тиіс жұмыс жүктемесін арттырады. Бұл процессордың көптеген асинхронды оқиғаларды, үзілістерді және т.б. бір уақытта өңдеуіне мүмкіндік береді, бұл процессордың жүктемеге шарықтап кетуіне әкелуі мүмкін. Бұл ядроларды өңдеу зауытының әртүрлі қабаттары ретінде қарастыруға болады, әр қабаты өзінің жеке тапсырмасын орындайды. Кейде, егер бір ядро ақпаратты өңдеуге жеткіліксіз болса, бұл ядролар өздеріне жақын орналасқан ядролармен бірдей тапсырмаларды орындайды. Көп ядролы процессорлар қосымша өңдеу қуатын ұсыну арқылы компьютердің бірнеше тапсырманы бір мезгілде орындау қабілетін жақсартады. Дегенмен, жылдамдық артуы қосылған ядролар санына тура пропорционал емес. Себебі ядролардың өзара әрекеттесуі үшін белгілі бір арналар қажет, ал ядролар арасындағы байланыс қол жетімді өңдеу жылдамдығының бір бөлігін пайдаланады. Қазіргі заманғы процессорлардың ерекше мүмкіндіктеріне байланысты, мысалы, бір мезгілде көп тізбекті өңдеу және uncore, бұл нақты процессор ресурстарын бөлісуді қамтиды, сонымен бірге оларды тиімді пайдалануға бағытталған, өнімділік деңгейін бақылау және аппараттық пайдалану күрделірек міндетке айналды. Осыған жауап ретінде, кейбір процессорлар процессордың әртүрлі бөліктерінің нақты пайдаланылуын бақылайтын және бағдарламалық жасақтамаға қолжетімді әртүрлі есептегіштерді ұсынатын қосымша аппараттық логиканы енгізеді. Мысалы, Intel-дің Performance Counter Monitor технологиясы.