bélyegkép|481x481px|Egyszerű, egyprocesszoros számítógép rajza. A fekete vonalak az adat, a pirosak az irányítás áramlását, a nyilak ezek irányát mutatják. A számítógép-architektúra egy számítógépes rendszer szerkezetének leírása. Lehet a megvalósítás részleteit figyelmen kívül hagyó magas szintű leírás. Egy részletesebb leírásban szerepelhet az utasításkészlet-architektúra, a mikroarchitektúra tervezése, a logikai tervezés és a megvalósítás. Történet Az első leírt számítógép-architektúrát Charles Babbage és Ada Lovelace alkották az Analytical engine leírásával. A Z1 1936-os építésekor Konrad Zuse későbbi projektjei két alkalmazásában leírta, hogy a gépi utasítások az adattal egy tárhelyen tárolhatóak, ez lett a tárolt program koncepciója.Susanne Faber, „Konrad Zuses Bemühungen um die Patentanmeldung der Z3”, 2000 Két további korai és fontos példa: Neumann János 1945-ös First Draft of a Report on the EDVAC című, a logikai elemek elrendezését leíró beszámolója; Alan Turing szintén 1945-ös részletesebb, Neumann beszámolójára hivatkozó elektronikusszámológép-terve az Automatic Computing Engine-hez.Reproduced in B. J. Copeland (Ed.), „Alan Turing's Automatic Computing Engine”, Oxford University Press, 2005, pp. 369-454.
Az architektúra fogalma a számítógépes irodalomban először Lyle R. Johnson és Fred Brooks, az IBM fő kutatóközpontjának két tagjának munkájában jelent meg 1959-ben. Johnson írt egy tanulmányt az Stretchről, melyet a Los Alamos-i Nemzeti Laboratóriumnak (akkori nevén Los Alamosi Tudományos Laboratórium) fejlesztettek. A formátumok, utasítástípusok, hardverparaméterek és sebességjavulások leírásának részletessége a „rendszer-architektúra” szintjén volt.
Ezután Brooks, a Stretch tervezője a Planning a Computer System: Project Stretch 2. fejezetét így kezdte: „A számítógép-architektúra, mint más architektúrák, a szerkezet felhasználóinak szükségleteinek meghatározása, majd azok oly tervezése, hogy ezeket a lehető leghatékonyabban töltse be gazdasági és technológiai kereteken belül”.
Brooks később az IBM System/360 (mai nevén IBM zSeries) számítógép-sorozaton dolgozott, ahol az „architektúra” jelentése „a felhasználó által ismerendő információ” lett. Later, computer users came to use the term in many less explicit ways.
A legkorábbi számítógép-architektúrákat papíron készítették, majd közvetlenül a végső hardverben alkották meg.Az ACE 1 év alatt 7-szer lett újratervezve a prototípus 1948-as készítése előtt. [B. J. Copeland (Ed.), "Alan Turing's Automatic Computing Engine", OUP, 2005, p. 57]
Később a számítógéparchitektúra-prototípusokat – például a Motorola 6800-éit és a PA-RISC-éit – fizikailag alakították ki TTL-t használó számítógépen, tesztelték, a végső változat előtt javították.
Az 1990-es évektől az új architektúrákat általában „megépítik”, tesztelik, majd javítják – más számítógép-architektúrában számítógéparchitektúra-szimulátoron vagy FPGA-ban puha mikroprocesszorként – a végső hardver kialakítása előtt.
Alkategóriák 3 fő elvük van a számítógép-architektúráknak: Utasításkészlet-architektúra (ISA): a processzor által elolvasott és feldolgozott gépi kódot, a szóméretet, a memóriacímzési módokat, a processzorregisztereket és az adattípusokat határozza meg. Mikroarchitektúra: más néven számítógép-elrendezés: egy processzor utasításkészletarchitektúra-megvalósítását írja le. A processzor gyorsítótárának mérete általában ISA-független kérdés. Rendszertervezés: egy számítógép többi hardveres részét tartalmazza, például a CPU-n kívüli adatfeldolgozást (például közvetlen memóriaelérés), a virtualizációt és a többes feldolgozást. Más technológiák is vannak a számítógép-architektúrában. Az alábbiakat a nagyobb cégek, például az Intel használják, és 2002-es becslések szerint az architektúrák 1%-át teszik ki: Makroarchitektúra: a mikroarchitektúráknál elvontabb architektúrarétegek. Összerakó utasításkészlet-architektúra: egy assembler egy absztrakt több gépre jellemző assemblyt a különböző megvalósítások gépi nyelvére fordíthatja. Programozó által látható makroarchitektúra: a magasabb szintű nyelvi eszközök, például a fordítóprogramok a programozókat összekapcsolják, az ISA, az UISA és a mikroarchitektúrák különbségeit láthatóvá téve. Például a C, a C++ vagy a Java programozó által látható makroarchitektúrákat határoznak meg. Mikrokód: utasításokat a chipen való működésre fordító szoftver. A hardvert „borítják”, annak utasításkészlet-felületének legmegfelelőbb változatát adva. Ez az utasításfordítási mód a tervezőknek számos lehetőséget ad, például: Új, javított chip, mely mikrokódot használhat a korábbi chippel azonos utasításkészlethez, így az utasításkészletet célzó szoftver az új chipen változtatás szükségessége nélkül fut. A mikrokód azonos chiphez több utasításkészletet ad, több szoftverrel való működést lehetővé téve. UISA: felhasználói utasításkészlet-architektúra – a PowerPC RISC processzorok utasításkészletének 3 részhalmazából az egyik. Az UISA az alkalmazásfejlesztők számára fontos utasításkészlet. A másik két utasítás a VEA (virtuáliskörnyezet-architektúra) virtualizációs rendszerek fejlesztőinek és az OEA (operációskörnyezet-architektúra) az operációs rendszerekhez. Tüskearchitektúra: A hardverplatformnak a mikroprocesszor által kínálandó funkciók, például az A20M, FERR/IGNNE vagy FLUSH x86-tüskék. Ezenkívül a processzor által a gyorsítótár-ürítéshez kiadandó üzeneteket is tartalmazza. Funkciói rugalmasabbak az ISA-éinál, mivel a külső hardver az új kódolásokhoz alkalmazkodhat, vagy tüskéről üzenetre válthat. Azért architektúra, mert a kompatibilis rendszereknek adandók a funkciók akkor is, ha a módszer változik. Szerepei Definíció A számítógép-architektúrák célja a számítógépes rendszerek teljesítménye, hatékonysága, ára és megbízhatósága közti egyensúly. Az utasításkészlet-architektúra például e tényezők egyensúlyát mutathatja meg. Az összetettebb utasításkészletek lehetővé teszik helyhatékonyabb programok írását, mivel egy utasítás nagyobb szintű absztrakciót kódolhatnak (például az x86 Loop utasítása). Azonban a hosszabb és összetettebb utasítások feldolgozása hosszabb és költségesebb. A nagy utasításkészlet nagyobb komplexitása a megbízhatatlanságra nagyobb lehetőséget ad, ha az utasítások váratlan módokon hatnak egymásra.
A megvalósítás integráltáramkör-tervezést, csomagolást, áramot és hűtést igényel. A tervezés optimalizálása a fordítóprogramok, az operációs rendszerek, a logikai tervezés és a csomagolás ismeretét igénylik. Utasításkészlet-architektúra Az utasításkészlet-architektúra a számítógép szoftvere és hardvere közti felület, mely a gép programozói nézeteként is tekinthető. A számítógépek nem „értik” a magas szintű programozási nyelveket, például a Javát, a C++-t vagy a legtöbb használt programozási nyelvet. A processzor csak numerikusan, például bináris számokkal kódolt utasításokat ért. A szoftverek, például a fordítóprogramok e magas szintű nyelveket a processzor által érthető utasításokká fordítja.
Az utasítások mellett az ISA határozza meg a program számára elérhető elemeket – például adattípusokat, regisztereket, címzésmódokat és memóriát. Az utasítások ezeket regiszterindexekkel vagy -nevekkel és memóriacímzési módokkal érik el.
Egy számítógép ISA-ját általában kézikönyv írja le, ahol az utasítások kódolása szerepelhet. Ezenkívül rövid nevek is szerepelhetnek az utasításokra. A neveket egy assembler felismerheti. Ez az ISA ember által olvasható változatát géppel olvashatóvá alakítja. Ezenkívül elérhetők disassemblerek is jellemzően hibakeresőkben és a bináris programok hibáinak izolálására és javítására. Számítógép-elrendezés A számítógép-elrendezés lehetővé teszi a teljesítményalapú termékek optimalizációját. Például a szoftverfejlesztőknek ismerni kell a processzorok teljesítményét. A szoftvert optimalizálniuk kellhet a legjobb teljesítmény legolcsóbban történő eléréséhez. Ehhez szükséges lehet a számítógép részletes elemzése. Például egy SD-kártyát a tervezőknek úgy kell elrendezniük, hogy a lehető legtöbb adat a lehető leggyorsabban feldolgozható legyen.
A számítógép-elrendezés lehetővé teszi a processzor kiválasztását adott projekthez. A multimédia-projektek gyors adathozzáférést igényelhetnek, míg a virtuális számítógépek gyors megszakításokat. Egyes feladatokhoz további komponensek is kellhetnek. Például egy virtuális gép futtatására képes számítógép virtuális memóriát igényel, így a különböző virtuális számítógépek memóriája elválasztható. A számítógép-elrendezés és -funkciók befolyásolják az energiafogyasztást és a költségeket. Megvalósítás Az utasításkészlet- és mikroarchitektúra megtervezése után a gyakorlati gép is kifejlesztendő, ez a megvalósítás. A megvalósítást általában nem architektúra-, hanem hardvertervezésnek tekintik. Ez több lépésre bontható: Logikai tervezés: az áramkörök tervezése logikai kapuk szintjén. Áramkörtervezés: az alapelemek (kapuk, multiplexerek, reteszek) valamint néhány nagyobb elem (ALU, gyorsítótárak stb.) tervezése tranzisztorok szintjén. Logikai kapuk szintjén vagy szükség esetén fizikailag megvalósítható. Fizikai megvalósítás: fizikai áramkörök rajzolása. A különböző áramköri elemek chiptervrajzra vagy áramköri lapra kerülnek, és létrejönnek az őket összekötő huzalok. Tervezés-ellenőrzés: a teljes számítógép megfelelő működésének ellenőrzése. A tervezésérvényesítés kezdetén logikaemulációval történik a logikai tervezés tesztje. Ez a realisztikus teszthez általában túl lassú. Így az első teszten alapuló javítások után prototípusokat állítanak elő FPGA-kkal. A legtöbb hobbiprojekt itt véget ér. Az utolsó lépés az integráltáramkör-prototípusok tesztje. Ez több újratervezést igényelhet.
CPU-k esetén e folyamat másképp történik, ezt gyakran CPU-tervezésnek nevezik. Tervezési célok Egy számítógépes rendszer formája függ a korlátoktól és a céloktól. A számítógép-architektúrák általában a szabványokat és a fogyasztást a teljesítménnyel, költségekkel, memóriával, késéssel (egy csomóponttól a forrásig megtett út ideje) és átvitellel hasonlítják össze. Néha más korlátok, például funkciók, méret, súly, megbízhatóság és bővíthetőség is számíthatnak.
Leggyakrabban a részletes teljesítményelemzés a fogyasztás megfelelő teljesítmény melletti alacsonyan tartását célozza. Teljesítmény A számítógép-teljesítmény gyakran ciklusonkénti utasításokkal (IPC) írható le, ami az architektúra hatékonysága tetszőleges frekvencián: a magasabb IPC gyorsabb számítógépet jelent. Régebbi számítógépek esetén az IPC akár 0,1 is lehetett, a modernebbek esetén ez körülbelül 1. A szuperskaláris processzorok esetén az IPC 3-5 közt van több utasítás egyszerre való végrehajtásával.
A gépi nyelvi utasítások számolása félrevezethet, mivel különböző ISA-kban különböző mennyiségű munkát végezhetnek. Az utasítás nem a gépi nyelvi utasítások száma, hanem általában a VAX architektúrán alapuló mértékegység.
A teljesítményt sok más tervezési mód is befolyásolja – például egy processzor futószalagozása a késést növeli, de az átvitelt javítja. A gépirányító számítógépeknek általában alacsony megszakítási késleltetés kell. E számítógépek valós idejű környezetben működnek, és a művelet adott időn belüli sikertelensége esetén sikertelenek. Például a számítógéppel irányított blokkolásgátló fékeknek előrejelezhető, korlátozott időn belül kell a fékpedál lenyomása után a fékezést indítani, különben a fékezés sikertelen.
A benchmarking e tényezőket figyelembe veszi egy tesztprogram-sorozat futtatásának idejének mérésével. Bár megmutatja az erősségeket, nem ez az egyetlen szempont számítógép-választáskor. Gyakran a mérési eredmények mérésenként eltérnek – például egy rendszer a tudományos alkalmazásokat kezelheti jól, egy másik a videójátékokat. Továbbá a tervezők speciális funkciókat adhatnak termékeikhez hardverrel vagy szoftverrel, lehetővé téve jó mérési eredményt általános feladatokon jelentkező előnyök nélkül. Hatékonyság