Arkitektura kompjuterike

alt=|parapamje|Diagrami bllok i një kompjuteri bazë me CPU me një procesor. Vijat e zeza tregojnë rrjedhën e sinjaleve të kontrollit, ndërsa vijat e kuqe tregojnë rrjedhën e udhëzimeve dhe të dhënave të procesorit. Shigjetat tregojnë drejtimin e rrjedhës.
Në shkencën kompjuterike dhe inxhinierinë kompjuterike, një **arkitekturë kompjuterike** është struktura e një sistemi kompjuterik i përbërë nga disa pjesë përbërëse.  Ndonjëherë mund të jetë një përshkrim i nivelit të lartë që anashkalon detajet e implementimit.  Në një nivel më të detajuar, përshkrimi mund të përfshijë projektimin e arkitekturës së grupit të udhëzimeve, projektimin e mikroarkitekturës, projektimin logjik dhe implementimin . 

## Histori 
Arkitektura e parë e dokumentuar e kompjuterit ishte në korrespondencën mes Charles Babbage dhe Ada Lovelace, ku përshkruhej motori analitik. Ndërsa ndërtonte kompjuterin Z1 në vitin 1936, Konrad Zuse përshkroi në dy aplikime për patentë për projektet e tij të ardhshme se udhëzimet e makinës mund të ruheshin në të njëjtën hapësirë ruajtjeje që përdoret për të dhënat, si  p.sh koncepti i programit të ruajtur.   Dy shembuj të tjerë të hershëm dhe të rëndësishëm janë:

* Punimi i vitit 1945 i John von Neumann, Drafti i Parë i një Raporti mbi EDVAC-un, i cili përshkruan një organizim të elementeve logjike;  dhe
* *Llogaritësi elektronik i propozuar* më i detajuar i Alan Turing për motorin automatik të llogaritjes, gjithashtu i vitit 1945 dhe i cili citonte punimin e John von Neumann . 

Termi "arkitekturë" në literaturën kompjuterike mund të gjurmohet te puna e Lyle R. Johnson dhe Frederick P. Brooks, Jr, anëtarë të departamentit të Organizimit të Makinave në qendrën kryesore kërkimore të IBM në vitin 1959. Johnson pati mundësinë të shkruante një komunikim kërkimor të brendshëm rreth Stretch, një superkompjuter i zhvilluar nga IBM për Laboratorin Kombëtar të Los Alamos (në atë kohë i njohur si Laboratori Shkencor i Los Alamos). Për të përshkruar nivelin e detajimit në diskutimin e kompjuterit të zbukuruar në mënyrë luksoze, ai vuri në dukje se përshkrimi i tij i formateve, tipeve të instruksioneve, parametrave të harduerit dhe përmirësimeve të shpejtësisë ishte në nivelin e "arkitekturës së sistemit", një term që i dukej më i dobishëm se "organizimi i makinës". 

Më pas, Brooks, një projektues i Stretch-eve, hapi Kapitullin e 2-të të një libri të quajtur *Planifikimi i një Sistemi Kompjuterik: Projekti Stretch* duke thënë, "Arkitektura kompjuterike, nga arkitekturat e tjera, është arti i përcaktimit të nevojave të përdoruesit të një strukture dhe më pas projektimi për të përmbushur këto nevoja sa më efektive të jetë e mundur brenda kufizimeve ekonomike dhe teknologjike." 

Brooks vazhdoi të ndihmonte në zhvillimin e linjës së kompjuterëve IBM System/360, në të cilën "arkitektura" u bë një emër që përcaktonte "çfarë duhet të dijë përdoruesi".  Linja System/360 u pasua nga disa linja kompjuterësh të përputhshëm, duke përfshirë linjën aktuale IBM Z. Më vonë, përdoruesit e kompjuterëve filluan ta përdorin këtë term në mënyra më pak të qarta. 

Arkitekturat më të hershme të kompjuterëve u projektuan në letër dhe më pas u ndërtuan direkt në formën përfundimtare të harduerit.  Më vonë, prototipet e arkitekturës së kompjuterit u ndërtuan fizikisht në formën e një kompjuteri me logjikë tranzistor-tranzistor (TTL) - siç janë prototipet e 6800 dhe PA-RISC - u testuan dhe u përshtatën, përpara se të merrnin formën përfundimtare të harduerit. Që nga vitet 1990, arkitekturat e reja të kompjuterëve zakonisht "ndërtohen", testohen dhe përshtaten - brenda një arkitekture tjetër kompjuterike në një simulator arkitekture kompjuteri; ose brenda një FPGA si një mikroprocesor i butë; ose të dyja - përpara se të merrnin formën përfundimtare të harduerit. 

## Nënkategoritë 
Disiplina e arkitekturës kompjuterike ka tre nënkategori kryesore: 

 Për shembull, madhësia e memories së përkohshme të CPU- së së një kompjuteri është një çështje që në përgjithësi nuk ka të bëjë fare me ISA-në.
* **Projektimi i sistemeve**: përfshin të gjithë komponentët e tjerë të harduerit brenda një sistemi kompjuterik, siç janë përpunimi i të dhënave përveç CPU-së (p.sh, qasja direkte në memorie), virtualizimi dhe multipërpunimi.

Ekzistojnë teknologji të tjera në arkitekturën e kompjuterëve. Teknologjitë e mëposhtme përdoren në kompani më të mëdha si Intel, dhe në vitin 2002 u vlerësua se përbënin 1% të të gjithë arkitekturës së kompjuterëve:

* **Makroarkitektura**: Shtresa arkitekturore më abstrakte sesa mikroarkitektura
* **Arkitektura e një grup instruksionesh të asamblesë**: Një asambler i zgjuar mund të konvertojë një gjuhë abstrakte asambleri të përbashkët për një grup makinash në  gjuhë makine paksa të ndryshme për zbatime të ndryshme.
* **Makroarkitektura e dukshme për programuesin**: Mjetet gjuhësore të nivelit më të lartë, siç janë kompiluesi, mund të përcaktojnë një ndërfaqe ose kontratë të qëndrueshme për programuesit që i përdorin ato, duke abstraktuar ndryshimet midis ISA-ve themelore dhe mikroarkitekturave. Për shembull, standardet C, C++ ose Java përcaktojnë makroarkitektura të ndryshme të dukshme për programuesin.
* **Mikrokodi**: Mikrokodi është softuer që përkthen udhëzimet për t'u ekzekutuar në një çip. Ai vepron si një mbështjellës rreth harduerit, duke paraqitur një version të preferuar të ndërfaqes së grupit të udhëzimeve të harduerit. Ky funksion i përkthimit të udhëzimeve u jep projektuesve të çipave fleksibilitet: P.sh. 1) Një version i ri i përmirësuar i çipit mund të përdorë mikrokodin për të paraqitur saktësisht të njëjtin grup udhëzimesh si versioni i vjetër i çipit, kështu që të gjitha softuerët që synojnë atë grup udhëzimesh do të ekzekutohen në çipin e ri pa pasur nevojë për ndryshime. 2) Mikrokodi mund të paraqesë një shumëllojshmëri grupe instruksionesh për të njëjtin çip themelor, duke i lejuar atij të ekzekutojë një larmi më të gjerë softuerësh.
* **Arkitektura e pinit**: Funksionet e harduerit që një mikroprocesor duhet t'i ofrojë një platforme hardueri, p.sh., pinat x86 A20M, FERR/IGNNE ose FLUSH. Gjithashtu, mesazhet që procesori duhet të lëshojë në mënyrë që memorjet e jashtme të mund të jenë të pavlefshme (zbrazëta). Funksionet e arkitekturës së pinit janë më fleksibile se funksionet ISA sepse hardueri i jashtëm mund të përshtatet me kodimet e reja, ose të ndryshojë nga një pin në një mesazh. Termi "arkitekturë" përshtatet, sepse funksionet duhet të ofrohen për sisteme të përputhshme, edhe nëse metoda e detajuar ndryshon.

## Rolet 
### Përkufizim 
Arkitektura e kompjuterit merret me balancimin e performancës, efikasitetit, kostos dhe besueshmërisë së një sistemi kompjuterik. Rasti i arkitekturës së setit të instruksioneve mund të përdoret për të ilustruar balancimin e këtyre faktorëve konkurrues. Instruksionet më komplekse u mundësojnë programuesve të shkruajnë programe më efikase në hapësirë, pasi një udhëzim i vetëm mund të kodojë disa abstraksione të nivelit më të lartë (siç është udhëzimi x86 Loop).  Megjithatë, udhëzimet më të gjata dhe më komplekse kërkojnë më shumë kohë që procesori të deshifrojë dhe mund të jenë më të kushtueshme për t'u zbatuar në mënyrë efektive. Rritja e kompleksitetit nga një set i madh instruksionesh gjithashtu rrit rrezikun e gabimeve kur instruksionet ndërveprojnë në mënyra të papritura.

Implementimi përfshin projektimin e qarqeve të integruara, paketimin, furnizimin me energji dhe ftohjen. Optimizimi i dizajnit kërkon njohuri mbi temat që shtrihen nga kompilatorët dhe sistemet operative deri te projektimi dhe paketimi logjik. 

### Arkitektura e grupit të instruksioneve 
 Një arkitekturë e grupit të instruksioneve (ISA) është ndërfaqja midis softuerit dhe harduerit të kompjuterit dhe gjithashtu mund të shihet si pamja e programuesit për makinën. Kompjuterët nuk i kuptojnë gjuhët e programimit të nivelit të lartë si Java, C++ ose shumicën e gjuhëve të përdorura për programim. Një procesor kupton vetëm udhëzimet e koduara në një formë numerike, zakonisht si numra binarë. Mjetet e softuerit, siç janë përpiluesi, i përkthejnë ato gjuhë të nivelit të lartë në instruksione që procesori mund t'i kuptojë.  

Përveç instruksioneve, ISA përcakton artikujt në kompjuter që janë të disponueshëm për një program p.sh, llojet e të dhënave, regjistrat, mënyrat e adresimit dhe memoria. Instruksionet i gjejnë këto artikuj të disponueshëm me indekset (ose emrat) e regjistrave dhe mënyrat e adresimit të memories.  

ISA-ja e një kompjuteri zakonisht përshkruhet në një manual të vogël instruksionesh, i cili shpjegon mënyrën se si kodifikohen instruksionet. Gjithashtu, ai mund të japë emra të shkurtër, të thjeshtë përkujtuese, për secilin instruksion. Emrat mund të njihen nga një mjet i zhvilluar i softuerëve i quajtur assemble. Një assembler është një program kompjuterik që përkthen një formë të ISA-së të lexueshme nga njeriu në një formë të lexueshme nga kompjuteri. Çmontuesit janë gjithashtu gjerësisht të disponueshëm, zakonisht në debuggers dhe programe softuerësh për të izoluar dhe korrigjuar funksione të gabuara në programet binare të kompjuterit. 

ISA-të ndryshojnë në cilësi dhe plotësi. Një ISA e mirë bën kompromis midis komoditetit të programuesit (sa e lehtë është për t'u kuptuar kodi), madhësisë së kodit (sa kod kërkohet për të kryer një veprim specifik), kostos së kompjuterit për të interpretuar udhëzimet (më shumë kompleksitet do të thotë më shumë harduer i nevojshëm për të deshifruar dhe ekzekutuar udhëzimet) dhe shpejtësisë së kompjuterit (me harduer më kompleks për dekodim vjen edhe një kohë më e gjatë e dekodimit). Organizimi i memories përcakton se si bashkëveprojnë uinstruksionet me memorien dhe si bashkëveprojnë me vetë-veten.

Gjatë emulimit të dizajnit, emulatorët mund të ekzekutojnë programe të shkruara në një set instruksionesh të propozuar. Emulatorët modernë mund të masin madhësinë, koston dhe shpejtësinë për të përcaktuar nëse një ISA e caktuar po arrin objektivat e saj.

### Organizimi i kompjuterëve 
Organizimi i kompjuterëve ndihmon në optimizimin e produkteve të bazuara në performancë. Për shembull, inxhinierët e softuerëve duhet të dinë fuqinë përpunuese të procesorëve . Ata mund të kenë nevojë të optimizojnë softuerin për të arritur performancën më të madhe me koston më të ulët. Kjo kërkon një analizë mjaft të detajuar të organizimit të kompjuterit. Për shembull, në një kartë SD, projektuesit mund të kenë nevojë ta rregullojnë kartën në mënyrë që sa më shumë të dhëna të mund të përpunohen në mënyrën më të shpejtë të mundshme.

Organizimi i kompjuterit gjithashtu ndihmon në planifikimin e zgjedhjes së një procesori për një projekt të caktuar. Projektet multimediale mund të kenë nevojë për akses shumë të shpejtë të të dhënave, ndërsa makinat virtuale mund të kenë nevojë për ndërprerje të shpejta. Ndonjëherë disa detyra kërkojnë edhe komponentë shtesë. Për shembull, një kompjuter që mund të ekzekutojë një makinë virtuale ka nevojë për harduer të memories virtuale në mënyrë që memoria e kompjuterëve të ndryshëm virtualë të mund të mbahet e ndarë. Organizimi dhe veçoritë e kompjuterit ndikojnë gjithashtu në konsumimin e energjisë dhe koston e procesorit.

### Zbatimi 
Pasi të jenë projektuar një grup instruksionesh dhe një mikroarkitekturë, duhet të zhvillohet një makinë praktike. Ky proces projektimi quhet *implementim* . Implementimi zakonisht nuk konsiderohet dizajn arkitekturor, por më tepër inxhinieri e dizajnit të harduerit. Implementimi mund të ndahet më tej në disa hapa:

* **Implementimi logjik** harton qarqet e nevojshme në nivelin e portave logjike .
* **Implementimi i qarkut** bën dizajne në nivel transistor të elementëve bazë (p.sh, portave, multipleksëve, çelësave), si dhe të disa blloqeve më të mëdha (ALU, memorie të fshehtë etj.) që mund të implementohen në nivelin e portave logjike, ose edhe në nivelin fizik nëse dizajni e kërkon këtë.
* **Implementimi fizik** vizaton qarqe fizike. Komponentët e ndryshëm të qarkut vendosen në një plan dyshemeje çipi ose në një pllakë dhe krijohen telat që i lidhin ato.
** **Verifikimi i dizajnit** teston kompjuterin si një tërësi për të parë nëse funksionon në të gjitha situatat dhe në të gjitha kohët e ekzekutimit. Pasi fillon procesi i verifikimit të dizajnit, dizajni në nivel logjik testohet duke përdorur emulatorë logjikë. Megjithatë, kjo zakonisht është shumë e ngadaltë për të kryer një test realistik. Prandaj, pas korrigjimeve bazuar në testin e parë, ndërtohen prototipe duke përdorur Field-Programmable Gate Arrays (FPGA).Shumica e projekteve hobi ndalen në këtë fazë. Hapi përfundimtar është testimi i qarkut të integruar të prototipit, i cili mund të kërkojë disa ripunime të dizajnit.

Për CPU-të, i gjithë procesi i implementimit është i organizuar ndryshe dhe shpesh quhet si dizajn i CPU-së.

## Synimet e dizajnit 
Forma e saktë e një sistemi kompjuterik varet nga kufizimet dhe qëllimet. Arkitekturat kompjuterike zakonisht bëjnë kompromis midis standardeve, fuqisë kundrejt performancës, kostos, kapacitetit të memories, vonesës (vonesa është koha që i duhet informacionit nga një nyje për të arritur te burimi.) dhe rendimentit. Ndonjëherë, faktorë të tjerë, si tiparet, madhësia, pesha, besueshmëria dhe zgjerueshmëria, janë gjithashtu të rëndësishëm.

Skema më e zakonshme bën një analizë të thelluar të energjisë dhe përcakton se si ta mbani konsumin e energjisë të ulët duke ruajtur performancën e duhur.

### Performanca 
Performanca e kompjuterëve modernë shpesh përshkruhet në instruksione për cikël (IPC), të cilat masin efikasitetin e arkitekturës në çdo frekuencë ore; një shpejtësi më e lartë IPC do të thotë që kompjuteri është më i shpejtë. Kompjuterët e vjetër kishin numërime IPC deri në 0.1, ndërsa procesorët modernë arrijnë lehtësisht gati 1. Procesorët superskalorë mund të arrijnë tre deri në pesë IPC duke ekzekutuar disa udhëzime për cikël ore. &#x5B; '''' &#x5D;

Numërimi i instruksioneve të gjuhës së makinerisë çon në keqkuptim, sepse ato mund të kryejnë sasi të ndryshme pune në ISA të ndryshme. “Instruksioni” në matjet standarde nuk është një numër i instruksioneve të gjuhës së makinerisë të ISA-së, por një njësi matje, zakonisht e bazuar në shpejtësinë e arkitekturës së kompjuterit VAX.

Shumë njerëz e masin shpejtësinë e një kompjuteri me frekuencën e orës (zakonisht në MHz ose GHz). Kjo i referohet cikleve për sekondë të orës kryesore të CPU-së . Megjithatë, kjo metrikë është disi çorientuese, pasi një makinë me një frekuencë më të lartë të orës mund të mos ketë domosdoshmërisht performancë më të madhe. Si rezultat, prodhuesit janë larguar nga frekuenca e orës si një masë e performancës.

Faktorë të tjerë ndikojnë në shpejtësi, siç janë përzierja e njësive funksionale, shpejtësia e autobusit, memoria e disponueshme dhe lloji dhe rendi i udhëzimeve në programe.

Ekzistojnë dy lloje kryesore të shpejtësisë: Vonesa dhe rendimenti. Vonesa është koha midis fillimit të një procesi dhe përfundimit të tij. Rendimenti është sasia e punës së kryer për njësi të kohës. Vonesa e ndërprerjes është koha maksimale e garantuar e reagimit të sistemit ndaj një ngjarjeje elektronike (si kur njësia e diskut përfundon lëvizjen e disa të dhënave).

Performanca ndikohet nga një gamë shumë e gjerë zgjedhjesh të projektimit - për shembull, lidhja e një procesori zakonisht e përkeqëson vonesën, por e përmirëson rendimentin. Kompjuterët që kontrollojnë makineritë zakonisht kanë nevojë për vonesa të ulëta ndërprerjesh. Këta kompjuterë funksionojnë në një mjedis në kohë reale dhe dështojnë nëse një operacion nuk përfundon në një kohë të caktuar. Për shembull, frenat anti-bllokim të kontrolluara nga kompjuteri duhet të fillojnë frenimin brenda një periudhe kohore të parashikueshme dhe të kufizuar pasi pedali i frenave të jetë ndjerë, përndryshe do të ndodhë dështimi i frenave.

Krahasimi i merr në konsideratë të gjithë këta faktorë duke matur kohën që i duhet një kompjuteri për të ekzekutuar një seri programesh testimi. Edhe pse krahasimi i rezultateve tregon pikat e forta, nuk duhet të jetë mënyra se si e zgjidhni një kompjuter. Shpesh makinat e matura ndahen në masa të ndryshme. Për shembull, një sistem mund të trajtojë aplikacionet shkencore shpejt, ndërsa një tjetër mund t'i bëjë video-lojërat më mirë. Për më tepër, projektuesit mund të synojnë dhe të shtojnë veçori të veçanta në produktet e tyre, përmes pajisjeve ose softuerëve, që lejojnë që një pikë referimi specifike të ekzekutohet shpejt, por nuk ofrojnë avantazhe të ngjashme me detyrat e përgjithshme.

### Efikasiteti i energjisë 
Efikasiteti i energjisë është një tjetër matje e rëndësishme në kompjuterët modernë. Një efikasitet më i lartë i energjisë shpesh mund të arrihet duke sakrifikuar shpejtësinë ose duke rritur koston. Matja tipike kur flitet për konsumimin e energjisë në arkitekturën e kompjuterit është MIPS/W (miliona instruksione për sekondë për watt).

Qarqet moderne kanë më pak energji të kërkuar për tranzistor ndërsa numri i tranzistorëve për çip rritet.  Kjo ndodh sepse çdo tranzistor që vendoset në një çip të ri kërkon furnizimin e vet me energji dhe kërkon ndërtimin e rrugëve të reja për ta furnizuar atë me energji. Megjithatë, numri i transistorëve për çip po fillon të rritet me një ritëm më të ngadaltë. Prandaj, efikasiteti i energjisë po fillon të bëhet po aq i rëndësishëm, edhe më i rëndësishëm sesa vendosja e gjithnjë e më shumë transistorëve në një çip të vetëm. Dizajnet e fundit të procesorëve e kanë treguar këtë theks, pasi ato i kushtojnë më shumë vëmendje efikasitetit të energjisë sesa ngjeshjes së sa më shumë transistorëve në një çip të vetëm.  Në botën e kompjuterëve të integruar, efikasiteti i energjisë ka qenë prej kohësh një qëllim i rëndësishëm së bashku me rendimentin dhe vonesën.

### Ndryshimet në kërkesën e tregut 
Rritjet në frekuencën e orës kanë qenë më të ngadalta në vitet e fundit, krahasuar me përparimet në uljen e konsumit të energjisë. Kjo është nxitur nga fundi i Ligjit të Moore-it, kërkesa për jetëgjatësi më të madhe të baterisë dhe reduktime në madhësi për teknologjinë mobile. Ky ndryshim i fokusit, nga frekuencat më të larta të orës tek kursimi i energjisë dhe zvogëlimi i madhësisë së komponentëve, ilustrohet nga uljet e konsiderueshme të konsumit të energjisë, deri në 50%, që u raportuan nga Intel në publikimin e mikroarkitekturës Haswell; ku ata ulën standardin e konsumit të energjisë nga 30-40 vat në 10-20 vat. Duke e krahasuar këtë me rritjen e shpejtësisë së procesorit nga 3 GHz në 4 GHz (2002–2006), shihet se fokusi në kërkim dhe zhvillim po largohet nga frekuenca e orës dhe po drejtohet drejt konsumit më të ulët të energjisë dhe zvogëlimit të hapësirës që zënë komponentët. 

## Shih dhe 
* Bit-serial architecture
* Comparison of CPU architectures
* Computer hardware
* CPU design
* Dataflow architecture
* Floating point
* Flynn's taxonomy
* Harvard architecture (Modified)
* Influence of the IBM PC on the personal computer market
* Orthogonal instruction set
* Reconfigurable computing
* Software architecture
* Transport triggered architecture
* Von Neumann architecture

## Referime 
## Referime 
* 
* Barton, Robert S., "Functional Design of Computers", *Communications of the ACM* 4(9): 405 (1961).
* Barton, Robert S., "A New Approach to the Functional Design of a Digital Computer", *Proceedings of the Western Joint Computer Conference*, May 1961, pp.&nbsp;393–396. About the design of the Burroughs B5000 computer.
* Bell, C. Gordon; and Newell, Allen (1971). "Computer Structures: Readings and Examples", McGraw-Hill.
* Blaauw, G.A., and Brooks, F.P., Jr., "The Structure of System/360, Part I-Outline of the Logical Structure" , *IBM Systems Journal*, vol. 3, no. 2, pp.&nbsp;119–135, 1964.
* 

## Lidhje të jashtme 
* Leksione mbi Arkitekturën Kompjuterike Carnegie Mellon
* ISCA: Aktet e Simpoziumit Ndërkombëtar mbi Arkitekturën Kompjuterike
* Mikro: Simpoziumi Ndërkombëtar IEEE/ACM mbi Mikroarkitekturën
* HPCA: Simpoziumi Ndërkombëtar mbi Arkitekturën e Kompjuterëve me Performancë të Lartë
* ASPLOS: Konferenca Ndërkombëtare mbi Mbështetjen Arkitekturore për Gjuhët e Programimit dhe Sistemet Operative
* Transaksionet ACM mbi Arkitekturën dhe Optimizimin e Kodit
* Transaksionet IEEE në Kompjuterë
*