Procesorji

Tehnika. Kako deluje...? Zakaj ne moremo narediti...?
Odgovori
amebica
Prispevkov: 44
Pridružen: 20.6.2013 7:47

Procesorji

Odgovor Napisal/-a amebica »

Prosim, bi mi kdo lahko pojasnil kakšna je razika med 4, 8, 16 bitnim procesorjem in kaj to pomeni v praksi, na razumljiv način.
Ne morem si predstaviti kaj to pomeni da je npr procesor 4-biten!
Hvala!

Uporabniški avatar
Aniviller
Prispevkov: 7263
Pridružen: 15.11.2004 18:16

Re: Procesorji

Odgovor Napisal/-a Aniviller »

Najprej idealizacija:

Stevilo bitov procesorja pove velikost "besede" s katero se vse dogaja: koliksne stevilke zna v enem kosu sestevat/mnozit/..., koliksne so instrukcije, in predvsem pomembno, koliksni so naslovi na spominske enote. Recimo ce vzames 8-bitni racunalnik bo to pomenilo:
Instrukcij bo 2^8=256, pri cemer mora v instrukciji bit zapisano kaj naredit, katere naslove vzet za spremenljivke in tako naprej. Recimo (idealizirano), da ima procesor 4 8-bitne registre. To pomeni, da za povedat kateri register mislis, rabis dva bita. Torej moras recimo za vsako operacijo dveh stevil povedat dva registra. S tem porabis 2+2=4 bite, kar pomeni, da ti ostane samo 4 bite (16 operacij) za povedat kaj hoces. Recimo, od 8 bitov instrukcije recimo prvi 4 biti torej pomenijo (mnozi/sestevaj/deli/odstevaj/kopiraj/logicni ali/logicni in/pomik levo/pomik desno/premakni iz spomina v register/premakni v spomin iz registra/...), potem pa 2 bita od kot vzames prvo spremenljivko, 2 pa za drugo. V stilu x=x+y: povedat moras kje se nahaja stevilo x in kje se nahaja y, in potem rezultat zapises nazaj v x. Kot vidis, 8 bitov je zelo malo ce hoces karkoli povedat.
Naslovov bo tudi samo 256 (z niclo vred, ki je ponavadi rezervirana za druge namene). Torej, ce bo spomin vecji od 256 bajtov, jih tvoj program ne bo mogel dostopat, saj ne more povedat naslova vecjega od 255.
In nazadnje, x+y recimo bos lahko izracunal za stevili x in y med 0 in 255 (ali, ce imas predznake, med -128 in 127), za vecje bos pa moral razbit na kose in sestevat tako kot na papir: s podpisovanjem in stetjem naprej. Omejitev z naslovi je v resnici posledica tega, ker v registru, v katerem poves od kod v spominu kopirat ali brat, ne mores spravit vecjih stevilk.
8-bitne barve tudi se mnogi poznamo iz starejsih casov, iz iger, ikon in podobnega - gif ima se vedno omejitev 256 razlicnih barv na sliko (8 bitov na piksel), ceprav ima lahko paleto, tako da ni nujno da so to vedno osnovne barve.

16-biten je glede tega boljsi: naslovis lahko ~64k spomina (to je znana stevilka za 16-bitne cipe, ki jih najdes v marsikaterem vezju v vseh mogocih napravah - mikrokontrolerji v mikrovalovkah, merilnih instrumentih, termostatih,...). V 64k spomina lahko ze spravis spodoben program. V 16-bitov stlacis tudi ze kar nekaj barv, pa tudi stevila do 64k so kar v redu. Za instrukcije si tudi lahko privoscis: vec registrov, in bolj siroko paleto racunskih operacij.

32-bitni sistem je bil prisoten zelo dolgo v osebnih racunalnikih: za vecino prakticnih rab je to cisto dovolj. 32-bitna stevila (do cca. 4 miljarde - 4G) so v redni rabi v programiranju kot osnovna stevilska enota (4 bajte), za instrukcije je vec kot dovolj prostora, v 4 bajte lahko tudi stlacis enojno natancnost stevil s plavajoco vejico, tako da racunanje z decimalkami ni problem, pa tudi lahko si instrukcije privoscis, da poves vse te dodatne operacije, recimo pretvarjanje decimalk v cela stevila, vse racunske operacije z decimalkami in tako naprej. Edino 32-bitno naslavljanje pa je ze postalo problem: 32-bitni sistem ne bo znal uporabit vec kot 4G rama (oziroma 2G, ce operacijski sistem uporablja predznacena stevila), kar pri Win XP ze opazis - 4G RAM ni nic posebnega danes. Ista omejitev je tudi kriva, da na neumnih starih datotecnih sistemih ne moras imeti vec kot 4G fajlov (zato so video fajli na dvd-jih razbiti na vec kosov). Se vedno dobis USB kljucke, ki uporabljajo nek starinski FAT sistem in ne dovoljujejo velikih fajlov.

64-bitni sistem je odpravil te tezave z naslavljanjem, pa tudi razkomotis se lahko zdaj pri dizajnu procesorjev. Edino to ne pride ravno brez tezav: 64-bitni naslovi pomenijo tudi, da naslavljanje pozre vec spomina. Torej, tak sistem bo avtomatsko tudi imel vecjo porabo, vecje programe (2-krat daljse instrukcije) pa tudi vecji pretok podatkov (vse to se more pumpat iz rama na procesor in nazaj) in to tudi upocasni delovanje. Dvakrat vecji naslovi pomenijo v dolocenih primerih kar konkretno povecano porabo.

V praksi ni tako enostavno, in niso vse instrukcije velikosti osnovne enote, in prav tako niso vsi registri enako dolgi. Recimo instrukcije so lahko sestavljene tako, da dolocene instrukcije pomenijo "za nadaljevanje instrukcije beri naslednjo enoto" in potem lahko poves tudi kaj dosti kompliciranega, enostavne instrukcije so pa se vedno lahko kratke, da ni treba vedno 8 bitov skurit tudi ko hoces rect samo "kopiraj to tja". Razsiritev za racunanje z "double precision" stevili (64-bitna plavajoca vejica) je bila (SSE2 v intelovih procesorjih) ze na 32-bitnem sistemu, in tudi sicer so pac lahko bili registri daljsi - procesor ze lahko toliko zakompliciras da racuna z vec kosi naenkrat, pa jih po vec naenkrat premika naokoli, samo naslavljanje je pa se vedno ena enota. Tako si lahko privoscis v eni potezi mnozit 128-bitna stevila (in dobit 256-bitni rezultat), pri cemer pac bodisi prestavljas vse 4 enote v enem kosu v spomin in nazaj, ali pa naslavljas vsak koscek posebej. Pa tudi pojem "1 instrukcija" na CISC procesorjih nima nekega dobrega pomena: 1 instrukcija se ne izvaja 1 cikel (pri dani frekvenci procesorja) ampak je odvisno od instrukcije (nekaj ciklov, do tudi 100 ciklov), in celo od situacije (vec instrukcij zaporedoma lahko tlaci eno za drugo preden rezultat pride ven, ampak ce pa rabis rezultat prve da izvedes drugo, mora pa cakat). Tako v praksi 3GHz ne pomeni 3 miljarde operacij na sekundo ampak precej manj - tudi do 100krat manj. Tudi dostop do spomina je zelo pocasen, in kopiranja iz RAM v registre pomeni lahko nekaj 100 ciklov da pridejo podatki (RAM je hiter, ampak ne tako kot procesor). Procesor ima zato cache, v katerem ima aktivne kose RAMa pripravljene na akcijo, in ce rabis kose ki so skupaj, to dela hitreje. Razen, ce se vec jeder procesorja "skrega" in spreminjajo iste kose, pol so pa spet problemi :) Pa tudi izvajanje pogojnih stavkov je vse prej kot enostavno - procesorji ugibajo resitev in gredo izvajat preden vedo rezultat pogoja: ce reces "ce je x>0, izvedi A, sicer izvedi B", bo procesor ugibal x in sel izvajat eno izmed moznosti preden bo sploh izracunal x in ga preveril. Ce se zmoti, gre popravit, sicer nadaljuje. Napol carovnistvo :)

Torej: 8-bitni procesor ima zelo omejeno uporabnost (samo bolj primitivne rabe, in zelo namenska vezja). 16-bitni so bili racunalniki kar pozno v 90-ta leta. Dosti programabilnih mikrocipov za najrazlicnejse rabe je danes 16-bitnih (poleg 8-bitnih). 32-bitno je prakticno univerzalno, 64-bitno je pa to kar imamo zdaj. Vec pa ne bo treba.

amebica
Prispevkov: 44
Pridružen: 20.6.2013 7:47

Re: Procesorji

Odgovor Napisal/-a amebica »

Hvala!
Samo še vedno mi ni jasno ono ostovno: odnost bita do vodila!
(npr, pri 4-bitnem procesorju)!
Tnx!

Uporabniški avatar
Aniviller
Prispevkov: 7263
Pridružen: 15.11.2004 18:16

Re: Procesorji

Odgovor Napisal/-a Aniviller »

No, vodila so ponavadi iste bitnosti (ker morajo prenest informacije v enem kosu), torej bodo vedno 4 vzporedne zice, ki nosijo vsaka en bit. V praksi je seveda lahko kombinirano in imas tudi sirsa vodila.

amebica
Prispevkov: 44
Pridružen: 20.6.2013 7:47

Re: Procesorji

Odgovor Napisal/-a amebica »

Hvala!!!

Torej , vodila so IZKLJUČNO žice?
Kaj povezujejo te žive? PCE in pomnilnik?
:)

Uporabniški avatar
vojko
Prispevkov: 11770
Pridružen: 29.5.2004 15:18
Kraj: LIMBUŠ
Kontakt:

Re: Procesorji

Odgovor Napisal/-a vojko »

Aniviller napisal/-a:Najprej idealizacija:

Stevilo bitov procesorja pove velikost "besede" s katero se vse dogaja: koliksne stevilke zna v enem kosu sestevat/mnozit/..., koliksne so instrukcije, in predvsem pomembno, koliksni so naslovi na spominske enote. Recimo ce vzames 8-bitni racunalnik bo to pomenilo:
Instrukcij bo 2^8=256, pri cemer mora v instrukciji bit zapisano kaj naredit, katere naslove vzet za spremenljivke in tako naprej. Recimo (idealizirano), da ima procesor 4 8-bitne registre. To pomeni, da za povedat kateri register mislis, rabis dva bita. Torej moras recimo za vsako operacijo dveh stevil povedat dva registra. S tem porabis 2+2=4 bite, kar pomeni, da ti ostane samo 4 bite (16 operacij) za povedat kaj hoces. Recimo, od 8 bitov instrukcije recimo prvi 4 biti torej pomenijo (mnozi/sestevaj/deli/odstevaj/kopiraj/logicni ali/logicni in/pomik levo/pomik desno/premakni iz spomina v register/premakni v spomin iz registra/...), potem pa 2 bita od kot vzames prvo spremenljivko, 2 pa za drugo. V stilu x=x+y: povedat moras kje se nahaja stevilo x in kje se nahaja y, in potem rezultat zapises nazaj v x. Kot vidis, 8 bitov je zelo malo ce hoces karkoli povedat.
Naslovov bo tudi samo 256 (z niclo vred, ki je ponavadi rezervirana za druge namene). Torej, ce bo spomin vecji od 256 bajtov, jih tvoj program ne bo mogel dostopat, saj ne more povedat naslova vecjega od 255.
In nazadnje, x+y recimo bos lahko izracunal za stevili x in y med 0 in 255 (ali, ce imas predznake, med -128 in 127), za vecje bos pa moral razbit na kose in sestevat tako kot na papir: s podpisovanjem in stetjem naprej. Omejitev z naslovi je v resnici posledica tega, ker v registru, v katerem poves od kod v spominu kopirat ali brat, ne mores spravit vecjih stevilk.
8-bitne barve tudi se mnogi poznamo iz starejsih casov, iz iger, ikon in podobnega - gif ima se vedno omejitev 256 razlicnih barv na sliko (8 bitov na piksel), ceprav ima lahko paleto, tako da ni nujno da so to vedno osnovne barve.

16-biten je glede tega boljsi: naslovis lahko ~64k spomina (to je znana stevilka za 16-bitne cipe, ki jih najdes v marsikaterem vezju v vseh mogocih napravah - mikrokontrolerji v mikrovalovkah, merilnih instrumentih, termostatih,...). V 64k spomina lahko ze spravis spodoben program. V 16-bitov stlacis tudi ze kar nekaj barv, pa tudi stevila do 64k so kar v redu. Za instrukcije si tudi lahko privoscis: vec registrov, in bolj siroko paleto racunskih operacij.

32-bitni sistem je bil prisoten zelo dolgo v osebnih racunalnikih: za vecino prakticnih rab je to cisto dovolj. 32-bitna stevila (do cca. 4 miljarde - 4G) so v redni rabi v programiranju kot osnovna stevilska enota (4 bajte), za instrukcije je vec kot dovolj prostora, v 4 bajte lahko tudi stlacis enojno natancnost stevil s plavajoco vejico, tako da racunanje z decimalkami ni problem, pa tudi lahko si instrukcije privoscis, da poves vse te dodatne operacije, recimo pretvarjanje decimalk v cela stevila, vse racunske operacije z decimalkami in tako naprej. Edino 32-bitno naslavljanje pa je ze postalo problem: 32-bitni sistem ne bo znal uporabit vec kot 4G rama (oziroma 2G, ce operacijski sistem uporablja predznacena stevila), kar pri Win XP ze opazis - 4G RAM ni nic posebnega danes. Ista omejitev je tudi kriva, da na neumnih starih datotecnih sistemih ne moras imeti vec kot 4G fajlov (zato so video fajli na dvd-jih razbiti na vec kosov). Se vedno dobis USB kljucke, ki uporabljajo nek starinski FAT sistem in ne dovoljujejo velikih fajlov.

64-bitni sistem je odpravil te tezave z naslavljanjem, pa tudi razkomotis se lahko zdaj pri dizajnu procesorjev. Edino to ne pride ravno brez tezav: 64-bitni naslovi pomenijo tudi, da naslavljanje pozre vec spomina. Torej, tak sistem bo avtomatsko tudi imel vecjo porabo, vecje programe (2-krat daljse instrukcije) pa tudi vecji pretok podatkov (vse to se more pumpat iz rama na procesor in nazaj) in to tudi upocasni delovanje. Dvakrat vecji naslovi pomenijo v dolocenih primerih kar konkretno povecano porabo.

V praksi ni tako enostavno, in niso vse instrukcije velikosti osnovne enote, in prav tako niso vsi registri enako dolgi. Recimo instrukcije so lahko sestavljene tako, da dolocene instrukcije pomenijo "za nadaljevanje instrukcije beri naslednjo enoto" in potem lahko poves tudi kaj dosti kompliciranega, enostavne instrukcije so pa se vedno lahko kratke, da ni treba vedno 8 bitov skurit tudi ko hoces rect samo "kopiraj to tja". Razsiritev za racunanje z "double precision" stevili (64-bitna plavajoca vejica) je bila (SSE2 v intelovih procesorjih) ze na 32-bitnem sistemu, in tudi sicer so pac lahko bili registri daljsi - procesor ze lahko toliko zakompliciras da racuna z vec kosi naenkrat, pa jih po vec naenkrat premika naokoli, samo naslavljanje je pa se vedno ena enota. Tako si lahko privoscis v eni potezi mnozit 128-bitna stevila (in dobit 256-bitni rezultat), pri cemer pac bodisi prestavljas vse 4 enote v enem kosu v spomin in nazaj, ali pa naslavljas vsak koscek posebej. Pa tudi pojem "1 instrukcija" na CISC procesorjih nima nekega dobrega pomena: 1 instrukcija se ne izvaja 1 cikel (pri dani frekvenci procesorja) ampak je odvisno od instrukcije (nekaj ciklov, do tudi 100 ciklov), in celo od situacije (vec instrukcij zaporedoma lahko tlaci eno za drugo preden rezultat pride ven, ampak ce pa rabis rezultat prve da izvedes drugo, mora pa cakat). Tako v praksi 3GHz ne pomeni 3 miljarde operacij na sekundo ampak precej manj - tudi do 100krat manj. Tudi dostop do spomina je zelo pocasen, in kopiranja iz RAM v registre pomeni lahko nekaj 100 ciklov da pridejo podatki (RAM je hiter, ampak ne tako kot procesor). Procesor ima zato cache, v katerem ima aktivne kose RAMa pripravljene na akcijo, in ce rabis kose ki so skupaj, to dela hitreje. Razen, ce se vec jeder procesorja "skrega" in spreminjajo iste kose, pol so pa spet problemi :) Pa tudi izvajanje pogojnih stavkov je vse prej kot enostavno - procesorji ugibajo resitev in gredo izvajat preden vedo rezultat pogoja: ce reces "ce je x>0, izvedi A, sicer izvedi B", bo procesor ugibal x in sel izvajat eno izmed moznosti preden bo sploh izracunal x in ga preveril. Ce se zmoti, gre popravit, sicer nadaljuje. Napol carovnistvo :)

Torej: 8-bitni procesor ima zelo omejeno uporabnost (samo bolj primitivne rabe, in zelo namenska vezja). 16-bitni so bili racunalniki kar pozno v 90-ta leta. Dosti programabilnih mikrocipov za najrazlicnejse rabe je danes 16-bitnih (poleg 8-bitnih). 32-bitno je prakticno univerzalno, 64-bitno je pa to kar imamo zdaj. Vec pa ne bo treba.
Aniviller, res si mojster! Tako nekako tipaje sem vse to že vedel, ampak tako nazorno razloženo pa še nisem bral nikjer. :wink:

Uporabniški avatar
Aniviller
Prispevkov: 7263
Pridružen: 15.11.2004 18:16

Re: Procesorji

Odgovor Napisal/-a Aniviller »

amebica napisal/-a:Hvala!!!

Torej , vodila so IZKLJUČNO žice?
Kaj povezujejo te žive? PCE in pomnilnik?
:)
Vodila rabis med vsemi komponentami: znotraj procesorja za pretok podatkov med racunskimi enotami, pa med napravami na maticni plosci (graficna kartica, RAM, disk, procesor...). Niso ravno samo zice (oziroma povezave v cipu) ampak imas se nekaj logicnega vezja, saj mora vodilo prenest informacije sinhrono glede na ritem ure, pa na ciljnem koncu mora informacija ostat "postavljena". Ko govoris o vodilih, ponavadi mislis na vodila, ki povezujejo vec kot dve napravi: tako da se morajo zmenit kdo oddaja in kdo sprejema - rabis vmes multiplekser in celo kontrolo kateri signali gredo kam. Ker imas pac vec naprav na istem vodilu.

Sicer si pa to lahko vse na wiki preberes:
http://en.wikipedia.org/wiki/Bus_%28computing%29
Celo slovenska wiki ima kratek opis :)
http://sl.wikipedia.org/wiki/Vodilo

amebica
Prispevkov: 44
Pridružen: 20.6.2013 7:47

Re: Procesorji

Odgovor Napisal/-a amebica »

Hvala!!! :D

Odgovori