Кіріспе

1970 жылдар IBM CPU. IBM-нің эксперименталды миникомпьютері. 801 – 1970 жылдары IBM әзірлеген эксперименталды орталық процессор (CPU) дизайны. Бұл барлық есептеулер үшін процессор тіркелгіштеріне сүйенетін және CISC дизайндарында кездесетін әртүрлі адрестеу режимдерін жоятын алғашқы заманауи RISC дизайны болып саналады. Алғашқыда телефон станциясы үшін процессор ретінде әзірленген, кейіннен ол миникомпьютер және олардың негізгі компьютерлік желісі үшін бірқатар өнімдердің негізі ретінде пайдаланылды. Бастапқы дизайн 24 биттік процессор болды, бірақ ол көп ұзамай 32 биттік нұсқаларымен ауыстырылды және бастапқы 24 биттік 801 тек 1980 жылдардың басына дейін қолданылды. 801 компьютер нарығында өте әсерлі болды. IBM үлкен көлемдегі өнімділік деректерімен қаруланып, қарапайым дизайн тіпті ең қуатты классикалық процессорлардан да оңай басып өте алатынын көрсетті, сонымен бірге CISC нұсқауларынан аздап ғана үлкен машиналық кодты жасады. Осы әдістерді System/370 сияқты процессорларға қолдану, әдетте, осы жүйелердің өнімділігін екі есеге арттырды. Бұл RISC тұжырымдамасының құндылығын көрсетті және IBM-нің болашақ жүйелерінің барлығы 801 жобасы барысында әзірленген принциптерге негізделді. 801-ге сіңірген еңбегі үшін Джон Кокке бірнеше марапаттар мен медальдармен марапатталды, соның ішінде 1987 жылғы Тьюринг сыйлығы, 1991 жылғы Ұлттық технология медалі және 1994 жылғы Ұлттық ғылым медалі.

Бастапқы тұжырымдама

1974 жылы IBM сағатына бір миллион қоңырауды немесе секундына 300 қоңырауды өңдейтін телефондық коммутатор құру мүмкіндігін қарастыра бастады. Олар әрбір қоңырауды аяқтау үшін 20 000 команда қажет екенін есептеді, ал уақыт шығындарын және басқа факторларды ескергенде, мұндай машина шамамен 12 MIPS өнімділікке ие болуы керек еді. Бұл өнімділік бойынша маңызды қадамды білдіретін, олардың қазіргі ең жаңа машинасы – 1972 жылдың соңындағы IBM System/370 Model 168, шамамен 3 MIPS өнімділік ұсынды. Томас Дж. Уотсон зерттеу орталығындағы, Джон Кокке сияқты мамандардан тұратын топ осы мақсат үшін процессорды жобалады. Қажетті өнімділікке қол жеткізу үшін, олар мұндай машинаға қандай операциялар қажет екенін қарастырып, тиіс емес операцияларды жойды. Мысалы, осы қолданбада қажеттілігі болмағандықтан, қозғалатын нүктелік бөлімді алып тастады. Көбірек маңыздысы, олар негізгі жадтағы деректермен жұмыс істейтін көптеген командаларды жойды және тек процессордың ішкі тіркелгіштерінде жұмыс істейтін командаларды қалдырды, себебі оларды пайдалану әлдеқайда жылдам болды, ал телефондық коммутатордағы қарапайым кодты тек осы типтегі командаларды пайдалану үшін жазуға болады. Бұл жұмыстың нәтижесі – қажетті өнімділікке ие, қарапайым процессордың тұжырымдамалық жобасы болды. Телефондық коммутатор жобасы 1975 жылы тоқтатылды, бірақ команда тұжырымдама бойынша маңызды прогресс жасады және қазан айында IBM оны жалпы мақсаттағы жоба ретінде жалғастыруға шешім қабылдады. Нақты жоба болмағандықтан, команда оны өзі жұмыс істеген ғимараттың атымен – "801" деп атады. Жалпы мақсаттағы рөл үшін команда әдеттегі мини-компьютерде іске қосылатын нақты бағдарламаларды қарастыра бастады. IBM өз машиналарындағы нақты жұмыс жүктемелерінің өнімділігі туралы үлкен көлемде статистикалық деректер жинады, және бұл деректер көрсеткендей, әдеттегі бағдарламаның жартысынан астамы тек бес команданы орындауға жұмсалды: жадтан мәнді жүктеу, жадқа мәнді сақтау, тармақтау, тұрақты нүктелі сандарды салыстыру және тұрақты нүктелі сандарды қосу. Бұл, процессордың қарапайым дизайны арнайы коммутатор сияқты, жалпы мақсаттағы мини-компьютерде де жақсы жұмыс істейтінін көрсетті.

Микрокодты қолдануға қарсы дәлелдер

Бұл қорытынды микрокодты пайдалану тұжырымдамасына негізделген заманауи процессор дизайнына қайшы келді. IBM осы техниканы кеңінен қолданған алғашқылардың бірі болды, оны System/360 сериясының бір бөлігі ретінде пайдаланды. 360 және 370 модельдері әртүрлі өнімділік деңгейлерінде қол жетімді болды, бірақ барлығы бір машина тіліндегі кодты орындады. Жоғары деңгейдегі машиналарда осы нұсқаулардың көп бөлігі тікелей аппараттық құралдарда, мысалы, қозғалатын нүктелік құрылғы сияқты жүзеге асырылды, ал төменгі деңгейдегі машиналар микрокодпен кодталған басқа нұсқаулар тізбегін пайдаланып осы нұсқауларды симуляциялай алатын. Бұл бүкіл желіде бір ғана қолданба екілік интерфейсін іске асыруға мүмкіндік берді және клиенттерге егер оларға қосымша өнімділік қажет болса, басқа өзгерістерсіз жылдам машинаға көшуге сенімділік сезімін сыйлады. Микрокод қарапайым процессорға көптеген нұсқауларды ұсынуға мүмкіндік берді, оларды дизайнерлер әртүрлі адрестеу режимдерін жүзеге асыру үшін пайдаланды. Мысалы, ADD сияқты нұсқаудың оннан астам нұсқасы болуы мүмкін: екі санды ішкі тіркеуіште қосу, тіркеуіштегі мәнге жадтан мән қосу, жадтан екі мәнді қосу және т.б. Бұл бағдарламалаушыға кез келген міндет үшін қажетті нұсқаны таңдауға мүмкіндік берді. Процессор бұл нұсқауды оқып, микрокодты пайдаланып, оны ішкі нұсқаулар тізбегіне бөледі. Мысалы, жадтағы екі санды қосу, осы екі санды тіркеуіштерге жүктеу, оларды қосу және содан кейін қосындыны жадқа сақтау арқылы жүзеге асырылуы мүмкін. Барлық нұсқаулар үшін барлық мүмкін адрестеу режимдерін ұсыну идеясы процессор дизайнерлерінің мақсаты болды, бұл тұжырымдама ортогональды нұсқаулар жиынтығы ретінде белгілі болды. 801 командасы осы тұжырымдаманың жанама әсерін байқады: берілген нұсқаудың көптеген нұсқаларына тап болғанда, компилятор авторлары көбінесе бір нұсқаны таңдайтын. Бұл көбінесе төменгі деңгейдегі машиналарда аппараттық құралдарда жүзеге асырылған нұсқа болатын. Бұл компилятор жасаған машиналық кодтың бүкіл желіде мүмкіндігінше жылдам орындалатынына кепілдік берді. Басқа нұсқауларды пайдалану аппараттық құралдарда жүзеге асырылған машинада одан да жылдам жұмыс істеуге мүмкіндік берсе де, машиналардың үнемі өзгеретін тізімінде қайсысын таңдау керектігін білудің қиындығы оны өте тартымсыз етіп жасады және компилятор авторлары бұл мүмкіндіктерді көбінесе елемеді. Нәтижесінде, нұсқаулар жиынтығындағы нұсқаулардың көп бөлігі компиляцияланған бағдарламаларда ешқашан қолданылмады. Осы жерде команда 801 жобасының маңызды тұжырымын жасады: компьютер мен оның пайдаланушылары арасына микрокод енгізу ең көп орындалатын нұсқауларды орындау кезінде қымбат үстеме шығындарды тудырады. Микрокод нұсқауды орындамас бұрын оны тексеру үшін нөлден өзгеше уақыт қажет. Микрокодты алып тастаған процессор осы үстеме шығындарды жойып, осы нұсқауларды жылдамдатырды. Микрокод негізінен белгілі бір аппараттық іске асыруға арналған шағын кіші программаларды орындағандықтан, ол түпкілікті компилятордың атқаратын бірдей негізгі міндетті орындады, жоғары деңгейдегі нұсқауларды машинаға тән нұсқаулар тізбегі ретінде жүзеге асырды. Микрокодты алып тастап, оны компиляторда жүзеге асыру арқылы машинаны жылдамдатуға болады. Бір қызығушылық - мұндай машина үшін жазылған бағдарламалар көбірек жадты қажет етеді: 370-те бір нұсқаумен орындалатын кейбір міндеттер 801-де бірнеше нұсқау ретінде берілуі керек еді. Мысалы, жадтан екі санды қосу үшін екі жүктеу нұсқауы, тіркеуіштерді қосу үшін тіркеуіштерді қосу және содан кейін жадқа сақтау қажет болады. Бұл жүйеде нұсқауларды жадтан оқуға бұрынғыдан көп уақыт жұмсауға тура келсе, жалпы жүйенің жылдамдығын төмендетуі мүмкін. Олар жобалау жұмыстарын жалғастыра отырып және компиляторларын жақсартып, бағдарламаның жалпы ұзындығы төмендегенін анықтады, ақырында 370-ке жазылған бағдарламалардың ұзындығымен шамалас болды.

Алғашқы іске асыру

Бастапқыда ұсынылған архитектура он алты 24 биттік регистрі бар және виртуалды жадысы жоқ машина болды. Ол нұсқауларда екі операнд форматын пайдаланды, сондықтан нұсқаулар көбінесе A = A + B түрінде болды, үш операнд форматы A = B + C түрінен өзгеше. Нәтижесінде алынған CPU 1980 жылдың жазында жұмыс істей бастады және Motorola MECL 10K дискретті компоненттер технологиясын қолдану арқылы жасалды, үлкен сымдалған арнайы платаларда орналастырылды. CPU 66 нс циклмен (шамамен 15,15 МГц) такталанды және шамамен 15 МИПС жылдамдықпен есептеуге қабілетті болды. 801 архитектурасы IBM құрылғыларының әртүрлі түрлерінде қолданылды, оның ішінде S/370 мейнфреймдері үшін арналық контроллерлер (мысалы, IBM 3090), түрлі желілік құрылғылар және IBM 9370 мейнфрейм отбасының 9373 және 9375 процессорларындағы тік микрокодты орындау бірлігі ретінде пайдаланылды. 801 архитектурасының бастапқы нұсқасы IBM ROMP микропроцессор архитектурасының негізі болды.

Кейінгі өзгерістер

Бастапқыда шектеулі функциялы жүйе үшін жасалған 801 дизайнында үлкен машиналарда кездесетін бірқатар мүмкіндіктер болмады. Олардың ішінде виртуалды жадты аппараттық деңгейде қолдаудың жоқтығы ерекше көзге түсті, ол контроллерлік рөлі үшін қажет болған жоқ және қажеттілік туғанда 801 жүйелерінде бағдарламалық түрде іске асырылған. Көптеп пайдалану үшін аппараттық қолдау міндетті болды. Сонымен қатар, 1980 жылдары компьютер индустриясы жалпы алғанда 32 биттік жүйелерге бет бұрды, және 801 үшін де солай жасауға ұмтылыс болды. 32 биттік форматқа көшудің тағы бір маңызды артықшылығы болды. Іс жүзінде, екі операндты форматты стандартты математикалық кодта пайдалану қиын екені анықталды. Ең жақсысы, екі кіріс операнды да кейінгі операцияларда қайта қолданылуы мүмкін болатын тіркелімдерде сақталар еді. Екі операндты форматта екі мәннің бірі нәтижемен жаңартылып, көбінесе мәннің бірін жадтан қайта жүктеу қажет болатын. 32 биттік форматқа көшу арқылы нұсқау сөздеріндегі қосымша биттер қосымша тіркелімді көрсетуге мүмкіндік берді, соның арқасында операцияның нәтижесін бөлек тіркелімге бағыттауға болады. Үлкен нұсқау сөзі тіркелімдер санын он алтыдан отыз екіге дейін арттыруға да мүмкіндік берді, бұл өзгеріс 801 кодын зерттеу арқылы анықталған. Нұсқау сөздерінің 24-тен 32-битке дейін ұзартылуына қарамастан, бағдарламалардың көлемі сәйкес 33%-ға артпады, себебі осы екі өзгерістің арқасында жадтан жүктеу және сақтау қажеттілігі болдырмады. Басқа да қажетті мүмкіндіктерге бірнеше ASCII символы бар бір жад сөзінде кодталған жолдармен жұмыс істеуге арналған нұсқаулар, сондай-ақ екілік кодталған ондық сандармен жұмыс істеуге арналған қосымшалар, оның ішінде төрт таңбалы ондық сандарды көшіруге қабілетті қосушы кірді. 801-дің жаңа нұсқасы 370-те симулятор ретінде іске қосылғанда, команда 801 үшін компиляцияланған және симуляторда іске қосылған кодтың 370-тің PL/I компиляторы арқылы тікелей 370 машиналық кодын құрастырған сол бастапқы кодтан жылдам орындалатынын көріп таң қалды. Олар тәжірибелік "PL.8" тілін 370-ке көшіріп, оны қолдана отырып бағдарламаларды құрастырғанда, ол PL/1 нұсқасынан үш есе жылдам жұмыс істеді. Бұл компилятордың кодты ішкі тіркелімдерге компиляциялау туралы RISC сияқты шешімдер қабылдауына байланысты болды, осылайша жадқа қол жеткізуді барынша оңтайландырды. Бұл 370-те 801-ге қарағанда қымбатқа түсті, бірақ бұл шығын әдетте CISC кодын жай ғана қарапайымдылығымен жасырылды. PL.8 компиляторы жадтан жүктеу және сақтаудан аулақ болуға тырысты, осылайша тіпті CISC процессорда да жоғары өнімділікке қол жеткізді.

"Чита", "Пантер" және "Америка" жобалары

1980 жылдардың басында 801-ден алынған тәжірибелер IBM Advanced Computer Systems жобасынан алынған тәжірибелермен біріктіріліп, нәтижесінде "Cheetah" деп аталған экспериментальды процессор құрылды. Cheetah – 2 жолды суперскалярлы процессор болды, ол 1985 жылы "Panther" деп аталатын процессорға, ал 1986 жылы "America" деп аталған 4 жолды суперскалярлы дизайнға эволюциялады. Бұл үш чиптен тұратын процессор жиынтығы, оның ішінде нұсқауларды алу және декодтау үшін нұсқау процессоры, нұсқау процессорымен бірге жұмыс істейтін тұрақты нүктелі процессор және оны қажет ететін жүйелер үшін қалқыма нүктелі процессор кірді. 801 командасы жасаған түпкілікті дизайн 1986 жылы IBM-нің Остин кеңсесіне жіберілді, онда ол IBM RS/6000 жүйесіне айналдырылды. 25 МГц жиілікте жұмыс істейтін RS/6000 өз дәуірінің ең жылдам машиналарының бірі болды. Ол жалпы тесттерде басқа RISC машиналарын екі-үш есеге басып өтті және ескі CISC жүйелерін оңай жеңіп шықты. RS/6000-нен кейін компания 801 концепциясының әртүрлі масштабтарда тиімді өндірілуі мүмкін болатын нұсқасына көшті. Нәтижесінде IBM POWER нұсқаулар жиынтығы архитектурасы және PowerPC тармағы пайда болды.