Historia procesorów ogólnego przeznaczenia - History of general-purpose CPUs

Historia ogólnego przeznaczenia CPU jest kontynuacją wcześniejszej historii obliczeniowej sprzętu .

Lata 50.: Wczesne projekty

Moduł lamp próżniowych z wczesnych komputerów IBM z serii 700

Na początku lat pięćdziesiątych każdy projekt komputera był wyjątkowy. Nie było maszyn kompatybilnych w górę ani architektur komputerowych z wieloma różnymi implementacjami. Programy napisane dla jednej maszyny nie działałyby na żadnym innym, nawet na innych rodzajach z tej samej firmy. Nie była to wówczas poważna wada, ponieważ nie stworzono dużego oprogramowania do uruchamiania na komputerach, więc rozpoczęcie programowania od zera nie było postrzegane jako duża bariera.

Swoboda projektowania w tamtych czasach była bardzo ważna, ponieważ projektanci byli bardzo ograniczeni kosztami elektroniki i dopiero zaczynali odkrywać, jak najlepiej zorganizować komputer. Niektóre z podstawowych funkcji wprowadzonych w tym okresie obejmowały rejestry indeksowe (na Ferrantiego Mark 1 ), instrukcję zapisywania adresu zwrotnego ( UNIVAC I ), operandy natychmiastowe ( IBM 704 ) i wykrywanie nieprawidłowych operacji ( IBM 650 ).

Pod koniec lat pięćdziesiątych budowniczowie komercyjni opracowali komputery zbudowane fabrycznie, dostarczane na ciężarówkę. Najczęściej instalowanym komputerem był IBM 650 , który wykorzystywał pamięć bębnów, do której ładowano programy za pomocą taśmy dziurkowanej lub kart perforowanych . Niektóre bardzo zaawansowane maszyny zawierały również pamięć rdzeniową, która zapewniała wyższe prędkości. Dyski twarde również zaczęły zyskiwać na popularności.

Komputer to automatyczne liczydło . Rodzaj systemu liczbowego wpływa na sposób jego działania. Na początku lat pięćdziesiątych większość komputerów została zbudowana do określonych zadań przetwarzania numerycznego, a wiele maszyn używało liczb dziesiętnych jako podstawowego systemu liczbowego; to znaczy, że matematyczne funkcje maszyn działały w systemie o podstawie 10 zamiast w systemie 2, jak to jest obecnie powszechne. Nie były to jedynie dziesiętne kodowane binarnie (BCD). Większość maszyn miała dziesięć lamp próżniowych na cyfrę w każdym rejestrze procesora . Niektórzy wcześni sowieccy projektanci komputerów wdrażali systemy oparte na logice trójskładnikowej ; to znaczy, że bit może mieć trzy stany: +1, 0 lub -1, odpowiadające napięciu dodatniemu, zerowemu lub ujemnemu.

Wczesny projekt dla Sił Powietrznych USA , BINAC, miał na celu stworzenie lekkiego, prostego komputera przy użyciu arytmetyki binarnej. Wywarło to głębokie wrażenie na branży.

Jeszcze w 1970 r. główne języki komputerowe nie były w stanie ustandaryzować swojego zachowania numerycznego, ponieważ komputery dziesiętne miały zbyt duże grupy użytkowników, by można je było zrazić.

Nawet gdy projektanci używali systemu binarnego, wciąż mieli wiele dziwnych pomysłów. Niektórzy używali arytmetyki znak-wielkość (-1 = 10001) lub dopełnienia jedynek (-1 = 11110), zamiast współczesnej arytmetyki dopełnienia dwójki (-1 = 11111). Większość komputerów używała sześciobitowych zestawów znaków, ponieważ odpowiednio kodowały karty dziurkowane Holleritha . Dla projektantów tego okresu dużym odkryciem było uświadomienie sobie, że słowo danych powinno być wielokrotnością rozmiaru znaku. Zaczęli projektować komputery z 12-, 24- i 36-bitowymi słowami danych (np. patrz TX-2 ).

W tej epoce w projektowaniu komputerów dominowało prawo Groscha : koszt komputera rósł wraz z kwadratem jego szybkości.

1960: Rewolucja komputerowa i CISC

Jednym z głównych problemów z wczesnymi komputerami było to, że program dla jednego nie działał na żadnym innym. Firmy komputerowe stwierdziły, że ich klienci nie mieli powodów, by pozostać lojalnymi wobec danej marki, ponieważ następny kupiony przez nich komputer i tak byłby niekompatybilny. W tym momencie jedyne obawy dotyczyły zwykle ceny i wydajności.

W 1962 roku IBM wypróbował nowe podejście do projektowania komputerów. Plan polegał na stworzeniu rodziny komputerów, które mogłyby obsługiwać to samo oprogramowanie, ale o różnej wydajności i w różnych cenach. W miarę wzrostu potrzeb użytkowników mogli oni przejść na większe komputery, zachowując wszystkie swoje inwestycje w programy, dane i nośniki pamięci.

W tym celu zaprojektowali jeden komputer referencyjny o nazwie System/360 (S/360). Był to komputer wirtualny, zestaw instrukcji referencyjnych i możliwości, które obsługiwałyby wszystkie maszyny w rodzinie. Aby zapewnić różne klasy maszyn, każdy komputer w rodzinie używałby mniej lub bardziej emulacji sprzętowej, a mniej lub bardziej emulacji mikroprogramu , aby stworzyć maszynę zdolną do obsługi pełnego zestawu instrukcji S/360 .

Na przykład maszyna z niższej półki może zawierać bardzo prosty procesor po niskich kosztach. Jednak wymagałoby to użycia większego emulatora mikrokodu w celu dostarczenia reszty zestawu instrukcji, co spowolniłoby to. Wysokiej klasy maszyna korzystałaby ze znacznie bardziej złożonego procesora, który mógłby bezpośrednio przetwarzać więcej projektu S/360, tym samym uruchamiając znacznie prostszy i szybszy emulator.

IBM świadomie zdecydował się, aby zestaw instrukcji referencyjnych był dość złożony i bardzo wydajny. Mimo że komputer był skomplikowany, jego magazyn kontrolny zawierający mikroprogram pozostałby stosunkowo mały i mógłby być wykonany przy użyciu bardzo szybkiej pamięci. Innym ważnym efektem było to, że jedna instrukcja mogła opisywać dość złożoną sekwencję operacji. W ten sposób komputery musiałyby na ogół pobierać mniej instrukcji z pamięci głównej, co mogłoby być wolniejsze, mniejsze i mniej kosztowne przy danej kombinacji szybkości i ceny.

Ponieważ S/360 miał być następcą zarówno maszyn naukowych, takich jak 7090, jak i maszyn do przetwarzania danych, takich jak 1401 , potrzebował konstrukcji, która mogłaby racjonalnie obsługiwać wszystkie formy przetwarzania. W związku z tym zestaw instrukcji został zaprojektowany do manipulowania prostymi liczbami binarnymi i tekstem, naukowymi liczbami zmiennoprzecinkowymi (podobnymi do liczb używanych w kalkulatorze) oraz kodowaną binarnie arytmetyką dziesiętną potrzebną systemom księgowym.

Prawie wszystkie kolejne komputery zawierały te innowacje w jakiejś formie. Ten podstawowy zestaw funkcji jest obecnie nazywany przetwarzaniem złożonych zestawów instrukcji (CISC, wymawiane „sisk”), terminem wynalezionym dopiero wiele lat później, kiedy zredukowane przetwarzanie zestawu instrukcji (RISC) zaczęło zdobywać udział w rynku.

W wielu CISC instrukcja może uzyskać dostęp do rejestrów lub pamięci, zwykle na kilka różnych sposobów. Ułatwiło to programowanie CISC, ponieważ programista mógł zapamiętać tylko trzydzieści do stu instrukcji oraz zestaw trzech do dziesięciu trybów adresowania zamiast tysięcy odrębnych instrukcji. Nazywano to ortogonalnym zbiorem instrukcji . Architektura PDP-11 i Motorola 68000 to przykłady prawie ortogonalnych zestawów instrukcji.

Była też grupa BUNCH ( Burroughs , UNIVAC , NCR , Control Data Corporation i Honeywell ), która rywalizowała wówczas z IBM; jednak IBM zdominował erę dzięki S/360.

Korporacja Burroughs (która później połączyła się ze Sperry/Univac, tworząc Unisys ) zaoferowała alternatywę dla S/360 dzięki swoim dużym systemom Burroughs serii B5000. W 1961 r. B5000 miał pamięć wirtualną, symetryczne przetwarzanie wieloprocesorowe, wieloprogramowy system operacyjny (Master Control Program (MCP)), napisany w ALGOL 60 i pierwsze w branży kompilatory rekurencyjne zstępujące już w 1964 r.

Późne lata sześćdziesiąte i wczesne siedemdziesiąte: LSI i mikroprocesory

MOSFET (metal-tlenek-półprzewodnik tranzystor polowy), znany również jako tranzystor MOS, został opracowany przez Mohamed atalla i Dawon Kahng w Bell Labs, 1959, 1960 i przedstawiono w Doprowadziło to do rozwoju tlenków metali - półprzewodnikowy (MOS) układ scalony (IC), zaproponowany przez Kahnga w 1961 roku i wyprodukowany przez Freda Heimana i Stevena Hofsteina w RCA w 1962 roku. Dzięki wysokiej skalowalności , znacznie niższemu zużyciu energii i większej gęstości niż tranzystory bipolarne , MOSFET umożliwiły budowanie układów scalonych o dużej gęstości . Postępy w technologii układów scalonych MOS doprowadziły pod koniec lat sześćdziesiątych do opracowania układów scalonych o dużej skali (LSI) i ostatecznie do wynalezienia mikroprocesora na początku lat siedemdziesiątych.

W latach 60. rozwój kalkulatorów elektronicznych, zegarów elektronicznych , komputera naprowadzania Apollo i pocisku Minuteman pomogły uczynić układy scalone MOS ekonomicznymi i praktycznymi. Pod koniec lat sześćdziesiątych pierwsze kalkulatory i układy zegarowe zaczęły pokazywać, że bardzo małe komputery mogą być możliwe dzięki integracji na dużą skalę (LSI). Doprowadziło to do wynalezienia mikroprocesora , jednoukładowego procesora. Intel 4004 , wydany w 1971 roku, był pierwszym komercyjnym mikroprocesorem. Początki 4004 sięgają „Projektu Busicom”, który rozpoczął się w japońskiej firmie zajmującej się kalkulatorami Busicom w kwietniu 1968 roku, kiedy inżynier Masatoshi Shima otrzymał zadanie zaprojektowania specjalnego chipsetu LSI wraz ze swoim przełożonym Tadashi Tanbą do użytku w Busicom 141-PF kalkulator biurkowy z zintegrowaną drukarką. Jego początkowy projekt składał się z siedmiu chipów LSI, w tym trzychipowego procesora . Jego projekt obejmował jednostki arytmetyczne ( sumatory ), jednostki mnożnika , rejestry , pamięć tylko do odczytu oraz zestaw makroinstrukcji do sterowania dziesiętnym systemem komputerowym . Busicom chciał wtedy chipsetu LSI ogólnego przeznaczenia, nie tylko do kalkulatorów biurkowych, ale także do innego sprzętu, takiego jak bankomat , kasa fiskalna i maszyna rozliczeniowa . W ten sposób Shima rozpoczął prace nad chipsetem ogólnego przeznaczenia LSI pod koniec 1968 roku. Inżynier Sharp Tadashi Sasaki , który również zaangażował się w jego rozwój, wpadł na pomysł jednoukładowego mikroprocesora w 1968 roku, kiedy omawiał tę koncepcję podczas burzy mózgów, która odbyła się na spotkaniu w Japonii. Sasaki przypisuje podstawowy wynalazek rozbicia chipsetu kalkulatora na cztery części z pamięcią ROM (4001), pamięcią RAM (4002), rejestrami przesuwnymi (4003) i procesorem (4004) bezimiennej kobiecie, badaczce inżynierii oprogramowania z Nara Women's College , która była obecny na spotkaniu. Sasaki miał wtedy swoje pierwsze spotkanie z Robertem Noyce z Intela w 1968 roku i przedstawił Intelowi i Busicomowi koncepcję czterodzielnego chipsetu.

Busicom zwrócił się do amerykańskiej firmy Intel o pomoc w produkcji w 1969 roku. Intel, który w tamtym czasie zajmował się głównie produkcją pamięci, miał zaplecze do produkcji wymaganego przez Busicom układu MOS z bramką krzemową o wysokiej gęstości . Shima udał się do Intela w czerwcu 1969, aby przedstawić swoją propozycję projektu. Ponieważ Intelowi brakowało inżynierów logiki, którzy mogliby zrozumieć schematy logiczne lub inżynierów obwodów, którzy mogliby je przekonwertować, Intel poprosił Shimę o uproszczenie logiki. Intel chciał jednoukładowego procesora, na który wpływ miał Tadashi Sasaki z firmy Sharp, który przedstawił tę koncepcję firmom Busicom i Intel w 1968 roku. Projekt jednoukładowego mikroprocesora został następnie opracowany przez Marciana „Teda” Hoffa z firmy Intel w 1969 roku, upraszczając początkowy projekt Shimy do cztery żetony, w tym jednoukładowy procesor. Ze względu na brak kluczowych szczegółów w sformułowaniu Hoffa, Shima wpadł na własne pomysły na znalezienie rozwiązań do jego wdrożenia. Shima była odpowiedzialna za dodanie 10-bitowego statycznego rejestru przesuwnego, aby był użyteczny jako bufor drukarki i interfejs klawiatury, wiele ulepszeń w zestawie instrukcji , dostosowanie organizacji pamięci RAM do kalkulatora, transfer informacji o adresie pamięci , kluczowy program w obszar wydajności i pojemności programu, specyfikacja funkcjonalna, idea komputera dziesiętnego, oprogramowanie, logika kalkulatora biurkowego, sterowanie we/wy w czasie rzeczywistym i instrukcja wymiany danych między akumulatorem a rejestrem ogólnego przeznaczenia . Hoff i Shima w końcu wspólnie zrealizowali koncepcję 4-bitowego mikroprocesora, z pomocą Stanleya Mazora z Intela, aby zinterpretować pomysły Shimy i Hoffa. Specyfikacje czterech układów zostały opracowane w ciągu kilku miesięcy w 1969 roku, pomiędzy zespołem Intela kierowanym przez Hoffa a zespołem Busicom kierowanym przez Shimę.

Pod koniec 1969 roku Shima wrócił do Japonii. Potem Intel nie wykonywał dalszych prac nad projektem aż do początku 1970 roku. Shima wrócił do Intela na początku 1970 roku i odkrył, że od jego odejścia nie wykonano żadnych dalszych prac nad 4004 i że Hoff przeniósł się do innych projektów. Zaledwie tydzień przed powrotem Shimy do Intela Federico Faggin dołączył do Intela i został liderem projektu. Po tym, jak Shima wyjaśnił projekt Fagginowi, pracowali razem nad zaprojektowaniem 4004. Tak więc głównymi projektantami chipa byli Faggin, który stworzył metodologię projektowania i projekt chipu opartego na krzemie, Hoff, który opracował architekturę przed przejściem do innych projektów oraz Shima, który wyprodukował pierwszy projekt firmy Busicom, a następnie pomógł w opracowaniu ostatecznego projektu firmy Intel. Model 4004 został po raz pierwszy wprowadzony w Japonii jako mikroprocesor kalkulatora Busicom 141-PF w marcu 1971 roku. W Ameryce Północnej pierwszą publiczną wzmianką o 4004 była reklama w wydaniu Electronic News z 15 listopada 1971 roku .

NEC wypuścił w 1971 r. μPD707 i μPD708, dwuukładowy 4-bitowy procesor . W kwietniu 1972 r. po nim pojawił się pierwszy jednoukładowy mikroprocesor NEC, μPD700. Był to prototyp dla μCOM-4 (μPD751). wydany w kwietniu 1973, łączący mikroprocesory μPD707 i μPD708 w jednym mikroprocesorze. W 1973 roku Toshiba wypuściła TLCS-12, pierwszy 12-bitowy mikroprocesor.

Lata 70.: rewolucja mikroprocesorowa

Pierwszy komercyjny mikroprocesor , oparty na binarnym kodowaniu dziesiętnym (BCD) Intel 4004 , został wydany przez firmy Busicom i Intel w 1971 roku. W marcu 1972 roku Intel wprowadził mikroprocesor o architekturze 8-bitowej , 8008 , zintegrowany układ logiczny pMOS . implementacja procesora Datapoint 2200 opartego na logice tranzystorowo-tranzystorowej (TTL) .

4004 projektantów Federico Faggin i Masatoshi Shima zaprojektowali jego następcę, Intel 8080 , nieco bardziej minikomputerowy mikroprocesor, w dużej mierze w oparciu o opinie klientów na temat ograniczonego 8008. Podobnie jak 8008, był on używany do zastosowań takich jak terminale , drukarki, kasy fiskalne i roboty przemysłowe. Jednak bardziej wydajny 8080 stał się również pierwotnym docelowym procesorem dla wczesnego, de facto standardowego systemu operacyjnego komputera osobistego zwanego CP/M i był używany do tak wymagających zadań kontrolnych, jak pociski manewrujące i wiele innych. Wydany w 1974 roku 8080 stał się jednym z pierwszych naprawdę rozpowszechnionych mikroprocesorów.

W połowie lat 70. powszechne było stosowanie układów scalonych w komputerach. Dekada naznaczona była wstrząsami rynkowymi spowodowanymi kurczącą się ceną tranzystorów.

Stało się możliwe umieszczenie całego procesora na jednej płytce drukowanej. W rezultacie minikomputery, zwykle z 16-bitowymi słowami i 4K do 64K pamięci, stały się powszechne.

Uważano, że CISC są najpotężniejszymi typami komputerów, ponieważ ich mikrokod był mały i mógł być przechowywany w bardzo szybkiej pamięci. Architektura CISC zajęła się również luką semantyczną, jak była wtedy postrzegana. Była to określona odległość między językiem maszynowym a językami programowania wyższego poziomu używanymi do programowania maszyny. Uważano, że kompilatory mogą wykonać lepszą pracę z bogatszym zestawem instrukcji.

Niestandardowe układy CISC były powszechnie konstruowane przy użyciu logiki komputerowej typu bit slice, takiej jak chipy AMD 2900, z niestandardowym mikrokodem. Komponent wycinka bitowego to element jednostki arytmetyczno-logicznej (ALU), pliku rejestru lub mikrosekwencera. Większość układów scalonych typu bit-slice miała szerokość 4 bitów.

Na początku lat 70. opracowano PDP-11 , prawdopodobnie najbardziej zaawansowany mały komputer swoich czasów. Niemal natychmiast wprowadzono CISC o szerszym znaczeniu, 32-bitowy VAX i 36-bitowy PDP-10 .

IBM nadal produkował duże, szybkie komputery. Jednak definicja dużego i szybkiego oznaczała teraz więcej niż megabajt pamięci RAM, zegary zbliżone do jednego megaherca i dziesiątki megabajtów dysków.

System 370 firmy IBM był wersją 360 dostosowaną do obsługi wirtualnych środowisk komputerowych. Komputer wirtualny został opracowany, aby zmniejszyć szanse na nieodwracalnej awarii oprogramowania.

W Burroughs dużych systemów (B5000, B6000, B7000) seria osiągnęła swój największy udział w rynku. Był to komputer stosu, którego system operacyjny został zaprogramowany w dialekcie Algola.

Wszystkie te różne wydarzenia rywalizowały o udział w rynku.

Pierwszy jednoukładowy 16-bitowy mikroprocesor został wprowadzony w 1975 roku. Panafacom , konglomerat utworzony przez japońskie firmy Fujitsu , Fuji Electric i Matsushita , wprowadził MN1610, komercyjny 16-bitowy mikroprocesor. Według Fujitsu był to „pierwszy na świecie 16-bitowy mikrokomputer na jednym chipie”.

Intel 8080 był podstawą 16-bitowego Intel 8086 , który jest bezpośrednim przodkiem dzisiejszej wszechobecnej rodziny x86 (w tym Pentium i Core i7 ). Każda instrukcja 8080 ma bezpośredni odpowiednik w dużym zestawie instrukcji x86, chociaż wartości kodu operacji są inne w tym drugim.

Wczesne lata 80. i 90.: lekcje RISC

We wczesnych latach osiemdziesiątych naukowcy z UC Berkeley i IBM odkryli, że większość kompilatorów i interpretatorów języka komputerowego używa tylko niewielkiego podzbioru instrukcji przetwarzania zbioru instrukcji złożonych (CISC). Duża część mocy procesora była ignorowana w rzeczywistym świecie. Zdali sobie sprawę, że czyniąc komputer prostszym i mniej ortogonalnym, mogą sprawić, że będzie on jednocześnie szybszy i mniej kosztowny.

Jednocześnie obliczenia procesora stały się szybsze w stosunku do czasu potrzebnego dostępu do pamięci. Projektanci eksperymentowali również z użyciem dużych zestawów rejestrów wewnętrznych. Celem było buforowanie wyników pośrednich w rejestrach pod kontrolą kompilatora. Zmniejszyło to również liczbę trybów adresowania i ortogonalność.

Projekty komputerów oparte na tej teorii nazwano obliczeniami ze zredukowanym zestawem instrukcji (RISC). RISC zwykle miały większą liczbę rejestrów, do których dostęp można uzyskać za pomocą prostszych instrukcji, z kilkoma instrukcjami przeznaczonymi do ładowania i przechowywania danych w pamięci. W rezultacie powstał bardzo prosty rdzeń procesora działający z bardzo dużą szybkością, obsługujący i tak różne rodzaje operacji, z których korzystały kompilatory.

Typowy wariant projektu RISC wykorzystuje architekturę Harvarda w porównaniu z architekturą Von Neumanna lub architekturą programów zapisanych, wspólną dla większości innych projektów. W maszynie opartej na architekturze Harvard program i dane zajmują oddzielne urządzenia pamięci i mogą być dostępne jednocześnie. W maszynach Von Neumanna dane i programy są mieszane w jednym urządzeniu pamięciowym, co wymaga dostępu sekwencyjnego, co powoduje tak zwane wąskie gardło Von Neumanna .

Jedną z wad projektu RISC było to, że programy, które na nich działają, są zwykle większe. Dzieje się tak, ponieważ kompilatory muszą generować dłuższe sekwencje prostszych instrukcji, aby wykonać te same wyniki. Ponieważ te instrukcje i tak muszą być ładowane z pamięci, większy kod kompensuje część szybkiej obsługi pamięci w projekcie RISC.

Na początku lat 90. inżynierowie z japońskiego Hitachi znaleźli sposoby na skompresowanie zredukowanych zestawów instrukcji, tak aby mieściły się one w jeszcze mniejszych systemach pamięci niż CISC. Takie systemy kompresji zastosowano dla zestawu rozkazów ich SuperH szeregu mikroprocesorów, wprowadzony w 1992 SuperH zestawu instrukcji został dostosowany do architektury ARM „s kciuk zestaw instrukcji. W aplikacjach, które nie wymagają uruchamiania starszego oprogramowania binarnego, skompresowane RISC zaczynają dominować w sprzedaży.

Innym podejściem do RISC był komputer z minimalnym zestawem instrukcji (MISC), niladic lub zestaw instrukcji z zerowym argumentem . Podejście to uświadomiło, że większość miejsca w instrukcji została wykorzystana do identyfikacji argumentów instrukcji. Maszyny te umieszczały operandy na stosie push-down (ostatni wchodzi, pierwszy wychodzi) . Zestaw instrukcji został uzupełniony o kilka instrukcji do pobierania i przechowywania pamięci. Najczęściej używane proste buforowanie w celu zapewnienia niezwykle szybkich maszyn RISC z bardzo kompaktowym kodem. Inną korzyścią było to, że opóźnienia przerwań były bardzo małe, mniejsze niż większość maszyn CISC (rzadka cecha maszyn RISC). W architekturze dużych systemów Burroughs zastosowano to podejście. B5000 został zaprojektowany w 1961 roku, na długo przed wynalezieniem terminu RISC . Architektura umieszcza sześć 8-bitowych instrukcji w 48-bitowym słowie i była prekursorem projektu bardzo długich słów instrukcji (VLIW) (patrz poniżej: od 1990 do dzisiaj ).

Architektura Burroughs była jedną z inspiracji dla języka programowania Forth Charlesa H. Moore'a , który z kolei zainspirował jego późniejsze projekty układów MISC. Na przykład jego rdzenie f20 miały 31 5-bitowych instrukcji, które pasowały do ​​czterech na 20-bitowe słowo.

Obecnie na rynku 32-bitowych systemów wbudowanych dominują układy RISC. Mniejsze chipy RISC stają się coraz bardziej powszechne na wrażliwym na koszty rynku 8-bitowych systemów wbudowanych. Głównym rynkiem dla procesorów RISC są systemy, które wymagają małej mocy lub niewielkich rozmiarów.

Nawet niektóre procesory CISC (oparte na architekturach, które zostały stworzone zanim RISC zdominowały), takie jak nowsze procesory x86 , tłumaczą instrukcje wewnętrznie na zestaw instrukcji podobny do RISC.

Te liczby mogą wielu zaskoczyć, ponieważ rynek postrzegany jest jako komputery stacjonarne. Konstrukcje x86 dominują w sprzedaży komputerów stacjonarnych i notebooków, ale takie komputery to tylko niewielka część sprzedawanych obecnie komputerów. Większość ludzi w krajach uprzemysłowionych posiada więcej komputerów w systemach wbudowanych w samochodzie i domu niż na swoich biurkach.

Od połowy do końca lat 80.: Wykorzystanie równoległości na poziomie instrukcji

W połowie lat 80. projektanci zaczęli stosować technikę określaną jako potokowanie instrukcji , w której procesor pracuje na wielu instrukcjach na różnych etapach realizacji. Na przykład procesor może pobrać operandy dla następnej instrukcji podczas obliczania wyniku bieżącego. Współczesne procesory mogą wykorzystywać kilkanaście takich stopni. (Potokowanie zostało pierwotnie opracowane pod koniec lat pięćdziesiątych przez International Business Machines (IBM) na swoim komputerze typu mainframe 7030 (Stretch).) Komputery z minimalnym zestawem instrukcji (MISC) mogą wykonywać instrukcje w jednym cyklu bez konieczności potokowania.

Podobny pomysł, wprowadzony dopiero kilka lat później, polegał na wykonywaniu wielu instrukcji równolegle na oddzielnych jednostkach arytmetyczno-logicznych (ALU). Zamiast operować tylko na jednej instrukcji na raz, procesor będzie szukał kilku podobnych, niezależnych od siebie instrukcji i wykonywał je równolegle. Takie podejście nazywa się projektowaniem procesora superskalarnego .

Takie metody są ograniczone stopniem równoległości poziomu instrukcji (ILP), liczbą niezależnych instrukcji w kodzie programu. Niektóre programy mogą działać bardzo dobrze na procesorach superskalarnych ze względu na ich nieodłączny wysoki ILP, zwłaszcza grafika. Jednak bardziej ogólne problemy mają znacznie mniej ILP, zmniejszając w ten sposób możliwe przyspieszenia z tych metod.

Rozgałęzienie to jeden z głównych winowajców. Na przykład program może dodać dwie liczby i rozgałęziać się do innego segmentu kodu, jeśli liczba jest większa niż trzecia liczba. W takim przypadku, nawet jeśli operacja rozgałęzienia zostanie wysłana do przetworzenia do drugiej jednostki ALU, nadal musi ona czekać na wyniki dodawania. Nie działa więc szybciej, niż gdyby był tylko jeden ALU. Najczęstszym rozwiązaniem tego typu problemu jest zastosowanie przewidywania rozgałęzień .

Aby zwiększyć wydajność wielu jednostek funkcjonalnych, które są dostępne w projektach superskalarnych , stwierdzono, że kolejnym czynnikiem ograniczającym są zależności rejestrów operandów. Aby zminimalizować te zależności, wprowadzono wykonywanie instrukcji poza kolejnością . W takim schemacie, wyniki instrukcji, które są całkowicie niezgodne z kolejnością, muszą być ponownie uporządkowane w kolejności programu przez procesor, aby program mógł zostać ponownie uruchomiony po wystąpieniu wyjątku. Realizacja poza zamówieniem była głównym osiągnięciem branży komputerowej w latach 90-tych.

Podobną koncepcją jest wykonanie spekulacyjne , w którym instrukcje z jednego kierunku rozgałęzienia (przewidywany kierunek) są wykonywane przed poznaniem kierunku rozgałęzienia. Gdy znany jest kierunek odgałęzienia, porównywany jest kierunek przewidywany i kierunek rzeczywisty. Jeśli przewidywany kierunek był prawidłowy, spekulacyjnie wykonane instrukcje i ich wyniki są zachowywane; jeśli był niepoprawny, te instrukcje i ich wyniki są usuwane. Wykonanie spekulacyjne w połączeniu z dokładnym predyktorem rozgałęzień daje duży wzrost wydajności.

Te postępy, które zostały pierwotnie opracowane na podstawie badań nad projektami w stylu RISC, pozwalają nowoczesnym procesorom CISC na wykonanie dwunastu lub więcej instrukcji na cykl zegara, podczas gdy tradycyjne projekty CISC mogą wymagać dwunastu lub więcej cykli do wykonania jednej instrukcji.

Wynikająca z tego logika szeregowania instrukcji tych procesorów jest duża, złożona i trudna do zweryfikowania. Co więcej, wyższa złożoność wymaga większej liczby tranzystorów, zwiększając zużycie energii i ciepło. Pod tym względem RISC jest lepszy, ponieważ instrukcje są prostsze, mają mniej współzależności i ułatwiają implementacje superskalarne. Jednak, jak wykazał Intel, koncepcje te można zastosować do projektowania złożonego zestawu instrukcji (CISC), mając wystarczająco dużo czasu i pieniędzy.

1990 do dziś: Patrząc w przyszłość

VLIW i EPIC

Logika planowania instrukcji, która tworzy procesor superskalarny, to logika logiczna. We wczesnych latach 90. istotną innowacją było uświadomienie sobie, że koordynację komputera z wieloma ALU można przenieść do kompilatora , oprogramowania, które tłumaczy instrukcje programisty na instrukcje na poziomie maszyny.

Ten typ komputera nazywany jest komputerem z bardzo długimi słowami instrukcji (VLIW).

Planowanie instrukcji statycznie w kompilatorze (w przeciwieństwie do planowania dynamicznego w procesorze) może zmniejszyć złożoność procesora. Może to poprawić wydajność oraz zmniejszyć ciepło i koszty.

Niestety kompilator nie ma dokładnej wiedzy na temat problemów związanych z planowaniem w czasie wykonywania. Sama zmiana mnożnika częstotliwości rdzenia procesora będzie miała wpływ na planowanie. Działanie programu, określone danymi wejściowymi, będzie miało duży wpływ na planowanie. Aby przezwyciężyć te poważne problemy, system VLIW można ulepszyć przez dodanie normalnego harmonogramu dynamicznego, tracąc niektóre zalety VLIW.

Planowanie statyczne w kompilatorze zakłada również, że kod generowany dynamicznie będzie rzadkością. Przed stworzeniem Javy i wirtualnej maszyny Javy było to prawdą. Rozsądnie było założyć, że powolne kompilacje wpłyną tylko na twórców oprogramowania. Teraz, gdy maszyny wirtualne kompilacji just -in-time (JIT) są używane w wielu językach, powolne generowanie kodu wpływa również na użytkowników.

Było kilka nieudanych prób komercjalizacji VLIW. Podstawowym problemem jest to, że komputer VLIW nie skaluje się do różnych punktów cenowych i wydajnościowych, jak może to zrobić komputer z harmonogramem dynamicznym. Inną kwestią jest to, że projekt kompilatora dla komputerów VLIW jest bardzo trudny, a kompilatory od 2005 r. często emitują kod nieoptymalny dla tych platform.

Ponadto komputery VLIW optymalizują przepustowość, a nie małe opóźnienia, więc były nieatrakcyjne dla inżynierów projektujących kontrolery i inne komputery wbudowane w maszyny. Do wbudowanych systemów rynki nieraz pionierem inne ulepszenia komputera zapewniając duży rynek nie przejęto o kompatybilności ze starszym oprogramowaniem.

W styczniu 2000 roku firma Transmeta Corporation podjęła nowatorski krok polegający na umieszczeniu kompilatora w jednostce centralnej i przekształceniu kompilatora z referencyjnego kodu bajtowego (w ich przypadku instrukcji x86 ) na wewnętrzny zestaw instrukcji VLIW. Metoda ta łączy w sobie prostotę sprzętową, niski pobór mocy i szybkość VLIW RISC z kompaktowym systemem pamięci głównej i kompatybilnością wsteczną oprogramowania zapewnianą przez popularny CISC.

Intel „s Itanium chip jest na podstawie tego, co nazywamy Explicitly Parallel Instruction Computing (EPIC) konstrukcja. Ten projekt podobno zapewnia zaletę VLIW w postaci zwiększonej przepustowości instrukcji. Pozwala jednak uniknąć niektórych problemów związanych ze skalowaniem i złożonością, wyraźnie umieszczając w każdym pakiecie instrukcji informacje dotyczące ich zależności. Ta informacja jest obliczana przez kompilator, tak jak w projekcie VLIW. Wczesne wersje są również kompatybilne wstecz z nowszym oprogramowaniem x86 dzięki trybowi emulatora na chipie . Wyniki liczb całkowitych były rozczarowujące i pomimo poprawy sprzedaż na rynkach wolumenowych jest nadal niska.

Wielowątkowość

Obecne projekty działają najlepiej, gdy na komputerze działa tylko jeden program. Jednak prawie wszystkie nowoczesne systemy operacyjne umożliwiają jednoczesne uruchamianie wielu programów. Przełączenie procesora i wykonanie pracy na innym programie wymaga kosztownego przełączania kontekstu . W przeciwieństwie do tego, wielowątkowe procesory mogą obsługiwać instrukcje z wielu programów jednocześnie.

Aby to zrobić, takie procesory zawierają kilka zestawów rejestrów. Gdy następuje przełączenie kontekstu, zawartość rejestrów roboczych jest po prostu kopiowana do jednego z zestawów rejestrów w tym celu.

Takie projekty często zawierają tysiące rejestrów zamiast setek jak w typowym projekcie. Z drugiej strony, rejestry wydają się być nieco kosztowne w przestrzeni chipowej potrzebnej do ich implementacji. Ta przestrzeń na chipy może być wykorzystywana w inny sposób do innych celów.

Intel nazywa tę technologię „hiperwątkowością” i oferuje dwa wątki na rdzeń w swojej obecnej ofercie Core i3, Core i5, Core i7 i Core i9 Desktop (a także w swojej ofercie Core i3, Core i5 oraz Core i7 Mobile), a także oferując do czterech wątków na rdzeń w zaawansowanych procesorach Xeon Phi.

Wielordzeniowy

Procesory wielordzeniowe to zazwyczaj wiele rdzeni procesora na tej samej kości, połączonych ze sobą za pośrednictwem współdzielonej pamięci podręcznej L2 lub L3, magistrali on-die lub przełącznika poprzecznego na kości . Wszystkie rdzenie procesora na matrycy współdzielą komponenty, z którymi łączą się z innymi procesorami i resztą systemu. Te komponenty mogą obejmować interfejs magistrali FSB, kontroler pamięci do łączenia z dynamiczną pamięcią o dostępie swobodnym (DRAM), spójne łącze pamięci podręcznej do innych procesorów oraz niekoherentne łącze do mostka południowego i urządzeń we/wy. Terminy wielordzeniowy i jednostka mikroprocesorowa (MPU) weszły do ​​powszechnego użytku dla jednej matrycy posiadającej wiele rdzeni procesora.

Inteligentna pamięć RAM

Jednym ze sposobów obejścia wąskiego gardła Von Neumanna jest połączenie procesora i pamięci DRAM na jednym chipie.

Logika rekonfigurowalna

Inną ścieżką rozwoju jest połączenie rekonfigurowalnej logiki z procesorem ogólnego przeznaczenia. W tym schemacie specjalny język komputerowy kompiluje szybko działające podprogramy w maskę bitową, aby skonfigurować logikę. Wolniejsze lub mniej krytyczne części programu można uruchamiać, dzieląc swój czas na procesorze. Proces ten pozwala na tworzenie urządzeń, takich jak radia programowe , wykorzystując cyfrowe przetwarzanie sygnału do wykonywania funkcji zwykle wykonywanych przez elektronikę analogową .

Procesory open source

Ponieważ granice między sprzętem a oprogramowaniem coraz bardziej się zacierają z powodu postępu w metodologii projektowania i dostępności chipów, takich jak programowalne macierze bramek (FPGA) oraz tańszych procesów produkcyjnych, zaczął pojawiać się nawet sprzęt open source . Luźno knit wspólnoty jak OpenCores i RISC-V ogłosiły niedawno całkowicie otwartych architektur procesora takie jak OpenRISC , które mogą być łatwo wdrożone na FPGA lub w niestandardowych produkowanych chipów, przez każdego, bez opłat licencyjnych, a nawet ustanowione twórcy procesorów takich jak Sun Microsystems mieć wydane projekty procesorów (np. OpenSPARC ) na licencjach open-source.

Procesory asynchroniczne

Jeszcze inną opcją jest procesor bez zegara lub asynchroniczny . W przeciwieństwie do procesorów konwencjonalnych, procesory bez zegara nie mają centralnego zegara, który koordynowałby przepływ danych w potoku. Zamiast tego, etapy procesora są koordynowane za pomocą urządzeń logicznych zwanych kontrolkami rurociągu lub sekwencerami FIFO . Zasadniczo kontroler potoku taktuje następny etap logiki po zakończeniu istniejącego etapu. Tak więc zegar centralny nie jest potrzebny.

W stosunku do logiki taktowanej może być łatwiej zaimplementować wysokowydajne urządzenia w logice asynchronicznej:

  • W taktowanym procesorze żaden element nie może działać szybciej niż częstotliwość taktowania. W procesorze bez zegara komponenty mogą działać z różnymi prędkościami.
  • W taktowanym procesorze zegar nie może być szybszy niż najgorsza wydajność najwolniejszego etapu. W procesorze bez zegara, gdy etap kończy się szybciej niż normalnie, następny etap może natychmiast pobrać wyniki, zamiast czekać na kolejny takt zegara. Etap może zakończyć się szybciej niż normalnie ze względu na rodzaj danych wejściowych (np. mnożenie może być bardzo szybkie, jeśli wystąpi o 0 lub 1), lub ponieważ działa przy wyższym napięciu lub niższej temperaturze niż normalnie.

Zwolennicy logiki asynchronicznej uważają, że te zdolności przyniosą następujące korzyści:

  • mniejsze rozpraszanie mocy dla danej wydajności
  • najwyższe możliwe szybkości realizacji

Największą wadą procesorów bez zegara jest to, że większość narzędzi do projektowania procesorów zakłada taktowany procesor ( obwód synchroniczny ), więc stworzenie procesora bez zegara (projektowanie obwodu asynchronicznego ) wiąże się z modyfikacją narzędzi projektowych do obsługi logiki bez zegara i wykonaniem dodatkowych testów, aby zapewnić konstrukcja pozwala uniknąć problemów z metastabilnością .

Mimo to zbudowano kilka asynchronicznych procesorów, w tym

Komunikacja optyczna

Jedną z obiecujących opcji jest wyeliminowanie magistrali FSB . Nowoczesne pionowe diody laserowe umożliwiają tę zmianę. Teoretycznie podzespoły komputera optycznego mogą łączyć się bezpośrednio przez holograficzny lub fazowy system przełączający na wolnym powietrzu. Zapewniłoby to duży wzrost efektywnej szybkości i elastyczności konstrukcji oraz dużą redukcję kosztów. Ponieważ złącza komputera są również najbardziej prawdopodobnymi punktami awarii, system bez magistrali może być bardziej niezawodny.

Co więcej, od 2010 r. nowoczesne procesory wykorzystują logikę 64- lub 128-bitową. Superpozycja długości fal optycznych może umożliwić przesyłanie danych i logiki o wiele rzędów wielkości wyższych niż w przypadku elektroniki, bez dodatkowej przestrzeni lub przewodów miedzianych.

Procesory optyczne

Inną długoterminową opcją jest wykorzystanie światła zamiast elektryczności do cyfrowej logiki. Teoretycznie może to działać o około 30% szybciej i zużywać mniej energii, a także umożliwiać bezpośredni interfejs z urządzeniami do obliczeń kwantowych.

Główne problemy związane z tym podejściem polegają na tym, że w przewidywalnej przyszłości elektroniczne elementy obliczeniowe będą szybsze, mniejsze, tańsze i bardziej niezawodne. Takie elementy są już mniejsze niż niektóre długości fal światła. Zatem nawet logika optyczna oparta na falowodach może być nieekonomiczna w porównaniu z logiką elektroniczną. Od 2016 r. większość prac rozwojowych dotyczy obwodów elektronicznych.

Procesory jonowe

Wykonano wczesne prace eksperymentalne nad wykorzystaniem reakcji chemicznych opartych na jonach zamiast działań elektronicznych lub fotonicznych do wdrożenia elementów procesora logicznego.

Architektura maszyny taśmowej

W porównaniu z konwencjonalną architekturą maszyn rejestrujących lub stosów , ale podobny do architektury Itanium firmy Intel, Ivan Godard i firma zaproponowali schemat adresowania rejestrów czasowych, który ma na celu znaczne zmniejszenie złożoności sprzętu procesora (w szczególności liczby rejestrów wewnętrznych i wynikające z tego ogromne drzewa multiplekserów ). Chociaż nieco trudniejsze do odczytania i debugowania niż nazwy rejestrów ogólnego przeznaczenia, pomaga zrozumieć, że taśma jest poruszająca się taśmą przenośnika, w której najstarsze wartości spadają z taśmy i znikają. Jest zaimplementowany w architekturze Mill.

Kalendarium wydarzeń

Zobacz też

Bibliografia

Zewnętrzne linki