GUIDA La Cpu Spiegata Ad Un Nabbo: Corso Avanzato

Reverser

Utente Attivo
333
251
Visto il successo del corso per Nabbi sulla CPU, vediamo di estendere le informazioni che riguardano il processore, alle periferiche e alle interazioni con esse, immediatamente più vicine alla CPU.

Solito doveroso Disclaimer: il linguaggio estremamente semplificato e goliardico è a scopo didattico, atto a generare figure mentali elementari che possano essere costruite-assimilate dal più vasto pubblico possibile, specie quello senza minime cognizioni tecniche.
Per seguire proficuamente questo corso avanzato, è necessario avere studiato ed appreso i concetti espressi nel corso base precedente.

Suggerisco, se volete diventare veramente padroni della materia tecnica, una rilettura del corso precedente.

Lezione 1: Il BIOS

Allora... ci eravamo lasciati con queste informazioni, che dovrebbero essere state acquisite:

- Una CPU capisce SOLO il binario
- Una CPU deve contare
- Una CPU ha un Modulo di clock che scandisce il ritmo delle sue operazioni
- Una CPU esegue operazioni aritmetiche e logiche con il Modulo ALU
- Una CPU ha dei piedini, detti anche di FLAG, che indicano che è successo qualcosa di cui tenere conto
- Una CPU ha un numero elevato di Moduli Registri, che memorizzano i dati in attesa di passarli all'ALU o verso le Uscite
- Una CPU capisce SOLO il Binario, linguaggio di BASSO LIVELLO, ma l'uomo ha altre soluzioni di ALTO LIVELLO per programmarla.
- Una CPU da 8 bit in su usa i BYTE, ovvero istruzioni e dati composti da blocchi di 8 cifre, che sono anche due numeri Esadecimali
- Una CPU contiene al suo interno un Modulo FPU che si occupa delle operazioni sui numeri con la virgola
- Una CPU DEVE avere una memoria esterna dove prende le ISTRUZIONI e i DATI del programma
- Una CPU ha un BUS indirizzi per indirizzare la memoria a fornire dalla sua uscita i dati/istruzioni, che poi rientrano dentro la CPU dal BUS DATI
- Una CPU ha un piedino di RESET che porta a zero tutti i suoi registri, tutte le sue uscite e tutte le sue entrate.

In particolare avevamo studiato le comunicazioni con la menoria, attraverso il BUS indirizzi ed il BUS dati.

Sappiamo che il Bus indirizzi è solamente di uscita verso la memoria, mentre il Bus dati è bi-direzionale, per ricevere o trasmettere dati da e verso la CPU.

Guardate la direzione delle frecce: nel BUS memoria vanno solo verso l'esterno, mentre per i DATI, le frecce vanno in entrambe le direzioni

41276d1355710149-la-cpu-spiegata-ad-un-nabbo-pinz80.png

Rammento che quella descritta è una Architettura tipica Von Neuman.

Abbiamo visto che dentro la RAM c'è il programma da eseguire, distinto in numeri binari che rappresentano semplici DATI e numeri binari che rappresentano delle ISTRUZIONI da eseguire su questi DATI da parte della CPU.

Una CPU a 16 bit di indirizzamento può contare da 0000000000000000 a 1111111111111111, cioè (in Umanesco) da 0 a 65535, oppure in Exa da 0000 a FFFF. Insomma, puòà indirizzare al massimo 65535 Byte (se le uscite dati sono a 8 bit) che sono semplificati in 64K (anche se in realtà sono 65535!). Qualcuno si ricorderà i 64K del Commodore 64.

Ora analizziamo un attimo lo schema sotto:

image1.gif

Vedete che ci sono sul BUS 2 tiopi diversi di memoria: una ROM e una RAM.

Ora siccome anche le capre sanno che una ROM è una memoria non riscrivibile, mentre la RAM è una memoria volatile ad accesso casuale, c'è da chiedersi il perchè di due tipologie di memoria.

Nella memoria ROM (che in realtà può essere una PROM; una EPROM, o una EEPROM) vengono inserite delle funzioni base che sono previste dal produttore. In genere dall'indirizzo 0000000000000000 fino ad un certo indirizzo dettato dalla dimensione in KB di questa memoria.

Questa memoria è il BIOS: Basic Input-Output System

bios.jpg bios.jpg bios_dip32.jpg

Il Processore legge le istruzioni ivi contenute per per fare il boot (booting= infilarsi uno stivale, calzarlo, assestamento tra piede e stivale) una metafora per indicare che il processore si calza al meglio tutte le periferiche di cui è circondato.

In quel "coso" sono memorizzati tutti i parametri delle periferiche di base della scheda madre, dati che il Processore legge al boot. Di solito le porte di cui dispone, USB, Seriali, Parallele, i Chipset, i parametri delle RAM (tempi di lettura, scrittura), indirizzi a cui trovare tutte queste periferiche, ecc.

bios02.jpg

Quindi, dopo il reset della partenza, il processore comincia a leggere dalla memoria all'indirizzo 0000000000000000 e passa al 0000000000000001 e così via.

All'accensione la RAM è VUOTA (ovviamente dopo il reset!) quindi le uniche istruzioni che può esegure la CPU sono quelle contenute nel BIOS nei primissi indirizzi della memoria.

Il Processore legge, chessò, fino alla locazione-cella 1024 (numero Umano) cioè fino alla locazione 0800 (in Exa) il programma del BIOS, poi, essendo finito il BIOS, il programma in esso contenuto, o il processore si ferma (non c'è più niente!) oppure le ultime istruzioni il BIOS dice al processore di passare ad un'altra memoria, che di norma sarebbe il Disco fisso, l'HD.

Il BIOS all'ultima istruzione che contiene, dice al processore di passare lall'HD, cioè al settore 0 di questo, chje contiene l'MBR, il Master Boot Record, ovvero il settore di avvio, che poi passerà a caricare un eventuale Sistema Operativo (DOS, Windows, LINUX, quellochevolete).

Due parole riassuntive ancora sul BIOS:

Il BIOS contiene informazione del produttore della Scheda Madre. In pratica comunica alla CPU informazioni su tutte le periferiche di cui è circondato e i loro parametri di funzionamento. Inoltre fornisce un sistema di RTC - Real Time Clock, cioè un Orologio alimentato che consente di dare data e ora assoluti anche dopo lo spegnimento (grazie ad una piccola batteria).

PILA.jpg

Il BIOS, di solito, è una lenta EPROM, quindi viene ri-memorizzata completamente nelle prime locazioni della più veloce RAM, in modo che il Processore, o il SOP, possa accedere alle sue funzioni in maniera più rapida. Questa memoria viene chiamata Memoria Shadow o Shadow Ram.

Questa memoria è INVIOLABILE! Ovvero niente e nessuno puà scrivere in questa porzione di memoria dove risisedono le funzioni basiche Hardware, che viene caricata all'avvio nei primissimi numeri della RAM.

Ho la sensazione di aver dimenticato molte cose, ma eventualmente qualcuno farà qualche domanda in merito.

Aggiorniamo il NaBBometro:

Una CPU è accompagnata da un BIOS, una porzione di memoria dove sono scritte delle funzioni base dell'Harware circostante.
Una CPU legge le primissime istruzioni dal BIOS, durante il BOOT, finito il quale poi passa a leggere le istruzioni sull'Hard Disk
Una CPU, dopo averlo letto, riscrive tutto il programma BIOS nella RAM, in modo da accedervi velocemente. Questo spazio è INVIOLABILE.
 
Ultima modifica:

attilorz

Utente Èlite
3,931
886
CPU
athlon 64 3200+ venice
Scheda Madre
DFI lanpary UT nf3 250GB
HDD
maxtor da 160 GB
RAM
256 MB corsair ddr 400 cl2
GPU
Nvidia FX 5500
Audio
disabilitata
Monitor
crt da 14"
PSU
enermax 400w (boh)
Case
1 scatola di 412s en plein air
OS
xp superlitted edition
ma se il bios è una rom (quindi non riscrivibile) quando si overclocca da bios e si modificano i parametri come FSB moltiplicatore etc. come funziona? cioè come vengono memorizzate le nuove impostazioni

- - - Updated - - -

ps reverser sei un grande!!! :ok:
 

Reverser

Utente Attivo
333
251
C'è da considerare l'evoluzione della ROM.

ROM: Read Only Memory, costituita da una maschera litografica con già gli 1 e i 0 al loro posto. Il primo esempio che mi viene in mente è quella di giochi anni 80, che risiedevano su ROM, interna alla consolle o in una cartuccia. Ve lo ricordate il "Tennis"?
basic_rom.jpg pong-compie-gli-anni-e-nato-su-console-il-3-a-L-bQW_Jq.jpeg atari2600.jpg annunci_47258_1.jpg

PROM: Programmable Read Only Memory: In pratica l'utente (un Tecnico!) poteva programmarsi il suo software (meglio chiamarlo Firmware), la sua ROM attraverso un apposito programmatore che bruciava dei micro-fusibili (o micro-diodi) posti in una matrice bidimensionale dentro la ROM. Se nella matrice c'era il fusibile, la corrente passava e valeva 1, se il fusibile era bruciato, la corrente non passava e quella cella valeva 0. Ovviamente si poteva programmare UNA sola volta.
programmable-read-only-memory-prom-13779-2292109.jpg diodi.gif
images


EPROM: Erasable Programmable Read Only Memory: Questo tipo di ROM poteva essere programmata, e successivamente cancellata, sottoponendola a lunghi cicli di raggi ultravioletti in appositi "cancellatori" dotati, appunto, di lampada UV. E' caratterizzata da una finestrella che rende visibile il die del chip, in modo da poter essere esposto ai raggi UV. Erano usate nei vecchi Computer di fine anni '80, primi anni '90, che tanto quasi mai dovevano essere aggiornati.
eproms.jpg 16k20prom-rom.jpg data-erase.jpg 3623822363_1b700ed426_m.jpg

EEPROM: Electrically Erasable Programmable Read Only Memory, memorie a sola lettura programmabili e cancellabili elettricamente.. Questi sono i moderni BIOS, che attraverso un adeguato segnale elettrico, possono essere riscritte ed aggiornate. Le ultime sono delle FLASH Memory, le stesse che abbiamo nelle chiavette USB, per questo possono essere modificate nei parametri, a piacere. ;)
bios.jpg
 

Allegati

  • $(KGrHqJ,!jIFBe7bNnkWBQnYbVuYpQ~~60_35.JPG
    $(KGrHqJ,!jIFBe7bNnkWBQnYbVuYpQ~~60_35.JPG
    13.9 KB · Visualizzazioni: 306
  • Electronic_component_eprom.jpg
    Electronic_component_eprom.jpg
    262.1 KB · Visualizzazioni: 485
Ultima modifica:

zugaro79

Nuovo Utente
11
1
Salve sono un nuovo utente....innanzi tutto complimenti per le spiegazioni che fornite a chi come me è un autodidatta vorrei fare una domanda: se io avessi bisognio di flashare una eepron della cFeon F16-100HIP che non è altro che un SPANSION EN25F16 e riscrivere il bios del mio compaq cq61 devo per forza avere un programmatore ho posso collegarlo tramite cablaggio alla porta parallela o quella seriale?Nel qual caso fosse possibile c'è una guida da poter visionare e seguire passo passo?? Se non ho capito male questo tipo di procedura è molto simile a quella che si usava per il flash delle xbox 360 ed io sinceramente l'ho visto fare senza nessun tipo di attrezzatura specifica ma con una serie di cavi e collegamenti diretti al chip in questione ( poi magari non so nemmeno io quello che ho visto) vorrei evitare di buttare via soldi per un pc che non so nemmeno se funziona.....i vari tecnici mi chiedono una paccata di soldi ed un programmatore mi costa poco meno se si riuscisse a risolvere nn mi dispiacerebbe grazie in anticipo Roberto
 

Reverser

Utente Attivo
333
251
Eccomi qua...

Quello che chiedi esula però dal normale percorso didtattico sui processori.

Innanzitutto pe flashare una EEPROM si dovrebbe usare uno dei tanti sistemi che offre la scheda madre (attraverso il BIOS, da DOS con i soliti AWFLASH.EXE, oppure da Windows per le MB più evolute).
Immagino che nel tuo caso la MB è defunta, quindi per risolvere il tuo caso bisognerebbe procedere così:

Procurarsi un programmatore di Eprom che supporti la famiglia di eprom che c'è sulla MB.
Levare la Eprom dallo zoccolo sulla scheda madre.
Infilarla dentro lo zoccolo del programmatore.
Procurarsi il file in esadecimale (.HEX) con il BIOS per la nostra precisa scheda madre.
Caricare il file sul software del Programmatore e flasshare la Eprom.
Reinfilare la Eprom dentro lo zoccolo sulla MB
Nel caso fosse danneggiata (la eprom) occorre procurarsene una nuova vergine, o anche una usata.

Non puoi operare diversamente da i metodi descritti sopra, tantomeno programmare la Eprom da porte parallele, seriali o USB...
 

zugaro79

Nuovo Utente
11
1
Eccomi qua...

Quello che chiedi esula però dal normale percorso didtattico sui processori.

Innanzitutto pe flashare una EEPROM si dovrebbe usare uno dei tanti sistemi che offre la scheda madre (attraverso il BIOS, da DOS con i soliti AWFLASH.EXE, oppure da Windows per le MB più evolute).
Immagino che nel tuo caso la MB è defunta, quindi per risolvere il tuo caso bisognerebbe procedere così:

Procurarsi un programmatore di Eprom che supporti la famiglia di eprom che c'è sulla MB.
Levare la Eprom dallo zoccolo sulla scheda madre.
Infilarla dentro lo zoccolo del programmatore.
Procurarsi il file in esadecimale (.HEX) con il BIOS per la nostra precisa scheda madre.
Caricare il file sul software del Programmatore e flasshare la Eprom.
Reinfilare la Eprom dentro lo zoccolo sulla MB
Nel caso fosse danneggiata (la eprom) occorre procurarsene una nuova vergine, o anche una usata.

Non puoi operare diversamente da i metodi descritti sopra, tantomeno programmare la Eprom da porte parallele, seriali o USB...

Grazie delle spiegazioni....il problema allora a questo punto non è solo il programmatore ma anche il file in quanto il bios che ti da la hp è in estensione .fd, dovrei dissaldare la eeprom e via dicendo.........io purtroppo ripeto sono un autodidatta ho gia provato le varie guide per ripristinare il bios ma non ha funzionato nulla purtroppo il pc parte la ventola e nulla piu dopo di che inizia a fare due lampeggi e una pausa due lampeggi e pausa e dal sito dicono che è solo un problema di bios.........e ci posso anche credere in quanto ho contattato molti utenti ebay che lo vendono e tutti hanno avuto il mio stesso problema nello stesso periodo quindi mi viene da pensare che sia stato lanciato un bios non compatibile ed effettivamente mi è partito un aggiornamento che mi ha chiesto il riavvio: al che pc deceduto........i vari tecnici mi hanno detto di cambiare scheda madre......chi il processore......io facccio il saldatore non il tecnico pc però per quel poco che ho imparato potevo anche fare da solo ma se mi serve il programmatore a questo punto non mi conviene........sentiti ringraziamenti per le informazioni che mi hai dato a presto Roberto.
 

Reverser

Utente Attivo
333
251
Memoria, Cache e Latenza

Prima di parlare di memoria nei vari tipi, è bene fare un disgressione sulla LATENZA.

Con latenza, genericamente, si intende uno stato di attesa, un qualcosa che sta in uno stato di quiete in attesa che qualcuno o qualcosa abbia terminato di fare qualcos'altro.

Nel mondo dei PC la LATENZA è una guerra in cui i progettisti combattono ogni giorno. Ci sono latenze di tutti i generi: latenze tra i registri, latenze verso i vari tipi di memoria, latenza da concorrenza per i dati su un Bus ecc.
Per esempio una latenza di concorrenza è quella di una periferica (magari l'output di una scheda audio) che "aspetta" che un Bus dati si liberi per poter trasmettere i propri dati (visto che il Bus può essere uno solo per molte periferiche).
Per questo esistono dei SEMAFORI (da qualche parte qualche uscita si porta a 1 e qualche ingresso riceve questo 1) che gestiscono questo flusso dati.
Se i progettisti fossero in grado di eliminare almeno un 20-30% di tutte le latenze che girano dentro un PC, si potrebbero avere sistemi 4 o 5 volte più veloci, e forse anche più!

E ora parliamo di Cache, anche se va detto che nell'architettura Von Neuman, non sarebbe prevista questa frammentazione della memoria di sistema in vari livelli di Cache.

Immaginatevi di essere un Professionista (CPU) che deve svolgere dei compiti su dei documenti. Avete la vostra bella scrivania (unità di calcolo) e comiciate a lavorare.
Naturalmente avete bisogno di documenti su cui lavorare. Ne avete qualcuno sulla vostra scrivania, ma quelli li risolvete velocemente. Allora, siccome voi non potete muovervi dalla scrivania, chiede ad Abdul, il vostro schiavo (Registro) di andare a prendervi altri documenti nella stanza in fondo ad un lungo corridoio (Memoria RAM). E mentre Abdul va a prendere i nuovi documenti (nuovi dati) voi non avete niente da fare (latenza) e vi grattate i gomiti.

Arriva Abdul con i dati, li mette sulla vs scrivania e voi li prendete e li sistemate rapidamente, e allora rimandate Abdul a prenderne degli altri, e ancora una volta aspettate senza fare nulla (latenza). Arrivano altri dati ma ancora una volta voi li sistemate rapidamente. Comiciate a frustare Abdul affinchè corra più veloce (aumento freq. di Clock), ma ci sono sempre dei periodi (latenze) in cui non fate nulla.

Quando vi siete rotti le scatole di essere così poco efficienti e poco produttivi, chiedete al Progettista dell'Azienda PC di mettervi in ufficio un armadio (Cache interna), in modo da archiviare una parte di documenti, in modo da non rimanere sprovvisti e ridurre i tempi di attesa (latenza).
Abdul, a questo punto, si fa carico di tenere sempre pieno l'armadio (Cache interna) e assumete una Segretaria (altro registro di Fetch e Cache Controller ) affinchè vi prenda i documenti dall'armadio e li posi sulla vs scrivania. Ma se voi comiciate ad accelerare il vostro lavoro, finirete di svuotare l'armadio (la Cache) più velocemente di quanto Abdul possa riempirlo.
Allora chiedete al solito Progettista di costruire una intera stanza, di fianco all'ufficio (Cache esterna), dove siano archiviati un bel pò di documenti, così da ridurre il tragitto che fa Abdul per prendere questi dati e riempire l'armadio interno, e ridurre ulteriormente i tempi morti (latenza CPU).

Alla fine, vi fate allargare l'ufficio e ci mettete dentro l'armadio piccolo e veloce (con la Segretaria che passa velocemente i dati) e tutti gli archivi che avevate nell'altra stanza.

In pratica nel nuovo ufficio, nella nuova CPU, nello stesso contenitore ci sono l'Unità di calcolo (ALU+FPU), la Cache di 1° livello e la Cache di 2° livello.

Finalmente potete lavorare decentemente, anche se qualche problema di tempo morto rimane sempre, perchè l'enorme archivio in fondo al corridoio (Memoria RAM) non può essere infilato dentro la vostra stanza, quindi Abdul deve continuare a recuperare velocemente dati per tenere pieno l'archivio interno e per recuperare eventuali dati importanti che non fossero contenuti nell'archivio interno, cioè a portata di mano.

image52.gif



P3chip2.jpg

Evoluzione Cache:

Pentium II con 512K di Cache L2 esterna (i due chippetti a destra):

intel_slot1_pentium_3_cache_front_big.jpg

Pentium II con cachè di 2° livello esterna al chip, montata su una cartuccia-slot

intel_slot1_pentium2_cache_big.jpg

Processori moderni con Cache L2 o L3 integrata dentro il DIE Ceramico

418TVloGVVL._SL500_AA300_.jpg cpu_intel_core_i5_mobile_i5_460m.jpg

Schema interno, con addirittura una ulteriore Cache di 3° livello:

die_schema.jpg


Facciamo un'analisi della Cache dal punto di vista progettuale.

Prima un flashend: la migliore situazione possibile per una CPU sarebbe una Memoria-Cache unica di, chenneso, 8 o 16 GB, tutta infilata dentro il processore e che viaggia alla stessa identica frequenza della CPU. Anzi, ancora meglio, messa fuori dal chip, così possiamo decidere noi la quantità, MA sempre con la caratteristica di viaggiare alla STESSA frequenza della CPU.

E qual'è il problema allora? Perchè non si fa così?

Sostanzialmente per una questione costruttiva e di costi. Memorie molto veloci sono costruttivamente molto difficili da produrre e, ovviamente, molto costose. Allora si arriva a questo compromesso: una parte molto veloce MA piccola per dimensioni (256-512K), viene messa vicinissima all'unità di calcolo, e viaggia alla STESSA freq della CPU (Esempio 4 GHZ), una seconda memoria-cache più grande (1-4 anche 8 MB) messa appena poco più distante, e magari funzionante a 1/2 freq. della CPU (Es. 2 GHz), quindi naturalmente più lenta. E poi alla fine la memoria esterna, che ha il vantaggio di essere molto capiente ed economica, anche se a frequeste abbastanza distanti da quelle a cui può viaggiare la capacità di calcolo della CPU (Es. 1066 MHz).

Il fatto di avere 1, 2 o 3 livelli di Cache non è un fatto di per se importante, si possono mettere anche 200 livelli di Cache, via via sempre più veloci, fermo restando che la situazione ideale rimane quella di una memoria che viaggia alla stessa frequenza della CPU, in modo lineare e senza salti (come nella struttura a Cache) tutta dentro il Chip oppure fuori. Fuori sarebbe cmq un problema tecnico perchè gestire Bus da 4 GHz non è uno scherzo, a causa di interferenze radio (frequenze così alte sono una sorgente elettromagnetica di radioonde) molto forti.
 
Ultima modifica:

Watashi

Utente Attivo
1,366
185
CPU
Intel Core i5 4670k
Scheda Madre
AsRock Z87 Extreme4
HDD
OCZ ARC 100 240GB, WD Caviar Blue 1TB, WD Caviar Red 6TB
RAM
Kingston HyperX Beast 2400MHz 16GB
GPU
Asus GTX 780 DirectCU II
Audio
Sound Blaster Z
Monitor
Asus ML229H FullHD 1080P
PSU
Cooler Master V650S
Case
Cooler Master HAF 912 Plus
OS
Windows 7 Home Premium 64 Bit SP1
Congratulazioni :)
 

Michele26

Bannato a Vita
3,716
264
CPU
Aspetto 4770k+612s con 2 CM red led | I5-2500K 3,7ghz+ Alpine 11plus | E5200 3,26ghz
Scheda Madre
Aspetto z87 | Asrock H67DE3 | ASUS P5KPL-AM
HDD
WD CaviarBlue 1TB | WD 250GB 7200rpm + 2x WD 1TB Intellipower | Maxtor 160GB
RAM
XMS3 8GB CL9 2000mhz | XMS3 16 GB CL9 1333mhz | Kingston 3GB CL5 892mhz
GPU
Boh | VGA Palit GTX 660 2GB OC Core 1085/1085MHz | Gigabyte GT430
Audio
Integrata 7.1 | integrata 7.1 | Integrata 7.1
Monitor
Tv lcd full hd 28"
PSU
Enermax Triathlor FC 700W | LC-POWER LC6600 600W | I Tech ITPS500 500w
Case
Aerocool Mechatron Window Edition | Vento TA-8 Series | I Tech IT113B
OS
Windows 7 ultimate x64 | Windows 7 ultimate x32
Complimenti!!!!!!!!!! Hai fatto proprio un ottimo lavoro, io vengo dall'industriale e ho le basi di elettronica di elettrotecnica e di sistemi per capire i concetti, ho anche un'infarinatura di informatica ma se non le avessi avute penso che hai spiegato talmente bene che avrei capito lo stesso e cmq grazie alle tue guide sono riuscito ad imparare tante nuove cose sul processore
 

Reverser

Utente Attivo
333
251
Ragazzi non passo spesso da queste parti perchè sono impegnato in un progetto importante (mi hanno promosso Responsabile del reparto R&D) però è una questione di debito che ho verso la Rete.

Ho imparato tantissimo da tante persone di buona volontà, che in un settore o nell'altro, hanno "perso del tempo" per condividere le loro conoscenze e darle, comprensibili, a tutti. Adesso è il mio turno di rendere alla Rete ciò che ho preso a mani basse in passato (e a dire il vero anche adesso, perchè quando mi manca qualche particolare, anche profondamente tecnico, vengo sul Web, SICURO che qualcuno ci è già passato ha già sviscerato il problema che sto ponendo.

Quindi se avete qualche domanda, specie sugli argomenti quà espressi, non peritatevi e fatele, anche se vi sembrano sciocchezze. nessuno è nato imparato e furbo. Io ogni tanto passo, e se vedo domande, state certi, che rispondo. ;)

- - - Updated - - -

Recupero da una mia vecchia discussione, quanto detto sulla Pipeline, e poi posso considerare conclusa questa seconda parte.

Da adesso in poi lasciamo spazio alle Domande.

La PiPeline
-------------------------------------

...il discorso è complesso, perchè in realtà il Sistema operativo continua a muovere dei Task in background mentre il gioco gira in primo piano. Per questo un FX-8xxx gira più forte di un 4 core FX-4xxx, anche se il gioco più di 3 o 4 core non impiega.

Ero curioso di capire come mai un AMD fosse inferiore ad un Intel, anche a frequenze di Clock molto superiori, quindi la mia natura di tecnico mi ha fatto analizzare l'architettura dei due tipi di processore.

In sostanza, spiegato a mia nonna cioè senza entrare esageratamente nel tecnico, l'architettura AMD è molto più aggressiva e poco prudente, mentre Intel è più convenzionale e "cauta".

A partire dal Pentium PRO è entrato nell'architettura X86 il concetto di Pipeline. Mentre prima i vecchi Pentium, MMX o lisci, eseguivano (detto molto semplicisticamente) una singola istruzione per ogni singolo ciclo di clock, quindi, grossomodo, ad una frequenza di 166 Mhz corrispondevano 166 operazioni x86, anzi, in realtà molto meno perchè ci sono istruzioni CPU x86 long che impiegano diversi cicli di clock per essere eseguite, cmq figuratevi una cosa del genere.

Quindi all'aumentare delle frequenze si scalavano linearmente le prestazioni del processore. Però questa tecnologia aveva forti limiti, perchè le frequenze non si possono aumentare indefinitivamente ed ogni breve lasso di tempo tempo (tecnologia della riduzione dello spessore del DIE). Quindi ecco il concetto di Pipeline.

Sempre semplificando estremamente possiamo immaginarci come una scatola verticale molto stretta e sviluppata in altezza dove vengono buttate dentro e dall'alto delle scatolette contenenti le istruzioni x86.

Ebbene le istruzioni NON vengono eseguite finchè la pipeline, la scatolona verticale, non è completamente piena, satura. Quindi diversi cicli di clock, molti, vengono impiegati per impilare le istruzioni dentro la pipeline, ed in questi cicli nessuna istruzione di output è presente in uscita, tempo morto che chiamiamo latenza di Pipeline.

Una volta piena la Pipeline ecco che inizia la parte computazionale della CPU, con l'esecuzione delle istruzioni sui dati.
Attraverso una serie di particolari tecniche di esecuzione, a Pipeline piena, le istruzioni che vengono eseguite per singolo colpo di clock diventano molte; 4, 5 e anche 6 istruzioni per ciclo di clock, aumentando ENORMEMENTE le capacità computazionali della CPU, e riprendendosi con gli interessi, il tempo di latenza trascorso in attesa che si riempisse la Pipeline.

Ora, una di queste tecniche, che si sono evolute nel tempo, per velocizzare le istruzioni per singolo ciclo, è la Branch Prediction.

Il Branch Prediction, come lascia indovinare il nome, è un Modulo previsore di una possibile sequenza di istruzioni, in maniera da preparare già in anticipo e riempire la Pipeline con la previsione dei dati, istruzioni e risultati.

Dopo un salto condizionato c'è sempre una diramazione in due direzioni del flusso operazioni e l'unità di BP cerca di indovinare quali saranno le istruzioni successive, preparando dati, operazioni su di essi e risultato finale. Ottimo, bene...

...bene finchè la previsione viene eseguita (ovvero HIT, colpita) e questo accade nel 95-98% dei casi.

Ma cosa accade quando la previsione non viene "colpita"? Un dramma! Un dramma temporale perchè quando un'istruzione non viene predetta o un dato non viene trovato, avviene un "cachè missing" ed in questo caso la Pipeline viene COMPLETAMENTE svuotata e riempita di nuovo con una sequenza di dati corretta, perchè quelli buttati dentro i cicli prima non servono a nulla, e tutto deve essere azzerato.
Questo comporta la perdita di diversi, numerosi cicli di clock in operazioni "nullafacenti" e nasce un tempo di latenza dove la CPU lavora per il nulla mischiato al niente.
Viene da se comprendere che una Pipeline molto lunga è molto più efficiente (una volta che è piena e parte) di una più corta, ma è anche molto penalizzante nel caso di un cache missing e successivo completo svuotamento.

Tornando all'architettura AMD, questa ha scelto di utilizzare Pipeling molto molto lunghe, confidando in una unità di BP molto efficiente e con una percentuale di HIT superiore all'unità disponibile dentro gli INTEL. Però... un previsore rimane un oggetto che esegue una stima, una valutazione, una previsione appunto, che non sempre è conforme a quello che accade nella realtà. Ecco che inevitabilmente, alla faccia della migliore efficienza, tutto viene vanificato da una mancata previsione.

Questo spiega perchè alcuni software che sono "prevedibili" nel loro output (pernsiamo ad un rendering o ad una modifica su un'immagine statica) hanno buoni risultati, mentre altri, come i giochi, fortemente dinamici e mutevoli, hanno una minore efficienza, proprio perchè statisticamente maggiormente soggetti a produrre cachè missing.

Ecco spiegato l'arcano della minore efficienza degli AMD in alcune situazioni.

E' vero che il software può essere, in una qualche misura, ottimizzato per evitare i cache missing, con un flusso il più regolare e lineare possibile, ma il concetto stesso di programma che ha un'interazione con servizzi esterni (tra cui anche l'operatore) per sua stessa natura non può essere contenuto in rigide regole statiche e lineari.

Mi scuso con i più tecnici per le eccessive semplificazioni, ma come detto in prefazione, era per spiegare il fenomeno a "mia Nonna", quindi a scopo didattico, per cui è meglio capire bene qualcosa di vicino alla realtà, che non capire nulla di una descrizione perfettamente aderente a questa realtà.
-------------------------------------------------

Avanti con le domande...
 
Ultima modifica:

attilorz

Utente Èlite
3,931
886
CPU
athlon 64 3200+ venice
Scheda Madre
DFI lanpary UT nf3 250GB
HDD
maxtor da 160 GB
RAM
256 MB corsair ddr 400 cl2
GPU
Nvidia FX 5500
Audio
disabilitata
Monitor
crt da 14"
PSU
enermax 400w (boh)
Case
1 scatola di 412s en plein air
OS
xp superlitted edition
grande reverser :ok: ti aspettavo ok faccio subito una domanda.
quando c'è un'esplosione e conseguenti cali di frame oltre al lavoro in più per la GPU avviene un cache missing? o la cpu calcola in anticipo traiettoria ed effetti del proiettile?
 

Reverser

Utente Attivo
333
251
grande reverser :ok: ti aspettavo ok faccio subito una domanda.
quando c'è un'esplosione e conseguenti cali di frame oltre al lavoro in più per la GPU avviene un cache missing? o la cpu calcola in anticipo traiettoria ed effetti del proiettile?


Non è proprio così.

Quanto descritto per la PIpeline, accade in un lasso di tempo quantificabile in microsecondi, se non nanosecondi.

Una Pipeline può contenere, forse, qualche Kilobyte di dati.

Facciamo un calcolo a babbo per dare grossomodo un'idea.

A 3 GigaHertz (3.000 MHz, ovvero tre miliardi di impulsi di clock al secondo) un impulso di clock dura circa (1/3.000.000.000) cioè 0.00000000003 secondi. Si tratta di 0.3 nanoSecondi, o 300 picoSecondi, un tempo minore del ciclo di vita di un Quark!

Un processore a 64 bit, per riempire la sua Pipeline da, mettiamo 1 kB (1.024 Byte) ci metterà si e no 200 cicli di clock, quindi 0.3 nSec per 200 = 60nSec

In 60 nSec ho riempito la mia Pipeline, e una volta partita i "movimenti interni a quella Pipeline si contano in decimi di nanosecondo.


Ora, nel tempo che un proiettile di un gioco, quale impiega 1 secondo a colpire il bersaglio, la Pipeline si è già riempita e svuuotata alcune milioni di volte!

Non è quindi in questo senso che va utilizzata l'ottimizzazione del software per rendere efficiente una Pipeline.

Tu però pensa che, ogni volta che dai un input al PC, che premi un tasto, muovi il mouse o muovi il Joystick, hai alterato un "normale" e prevedibile flusso di dati in una nuova ed imprevedibile (dal processore, che poveraccio, che czz ne sa in che direzione vuoi muovere Lara Croft...) direzione di questi dati.
Giocando e smanettando con un Joystick, svuoti continuamente la Pipeline che non sa mai che czz fare.

Ecco perchè i giochi non rendono al meglio con i processori a Pipeline lunga. Una volta che hai spostato l'omino, la Pipeline si svuota e ci vuole "mezzora" prima che si riempa di nuovo. E ricordiamoci che finchè la Pipeline non è piena, il processore non fa una mazza (ovvero è impegnato a recuperare i dati da buttare dentro la Pipeline finchè non è piena).

Al contrario, se renderizziamo una scena statica, come un processo di 3DStudio Max o Lightwave, allora in un flusso di calcolo costante, la Pipeline sarà costantemente piena, beneficiando della potenza elaborativa di una Pipeline profonda perfettamente efficiente.

Naturalmente poi ci sono tutte le vie di mezzo.

Questo detto molto molto approssimando.

- - - Updated - - -

Un esempio "visivo" e gorossolano della differenza del calcolo sequenziale ed uno a pipeline.

Esecuzione sequenziale:

10 istruzione -> un colpo di clock: BAM
20 istruzione -> un colpo di clock: BAM
30 istruzione -> un colpo di clock: BAM
40 istruzione -> un colpo di clock: BAM
50 istruzione -> un colpo di clock: BAM
60 istruzione -> un colpo di clock: BAM
70 istruzione -> un colpo di clock: BAM
80 istruzione -> un colpo di clock: BAM
90 istruzione -> un colpo di clock: BAM
100 istruzione -> un colpo di clock: BAM
110 istruzione -> un colpo di clock: BAM
120 istruzione -> un colpo di clock: BAM
130 istruzione -> un colpo di clock: BAM
140 istruzione -> un colpo di clock: BAM
150 istruzione -> un colpo di clock: BAM
160 istruzione -> un colpo di clock: BAM
170 istruzione -> un colpo di clock: BAM
180 istruzione -> un colpo di clock: BAM
190 istruzione -> un colpo di clock: BAM
200 istruzione -> un colpo di clock: BAM
210 RISULTATO


PIPELINE:

10 sono occupato a riempire la pipeline, quindi non faccio una mazza
20 sono occupato a riempire la pipeline, quindi non faccio una mazza
30 sono occupato a riempire la pipeline, quindi non faccio una mazza
40 sono occupato a riempire la pipeline, quindi non faccio una mazza
50 sono occupato a riempire la pipeline, quindi non faccio una mazza
60 sono occupato a riempire la pipeline, quindi non faccio una mazza
70 sono occupato a riempire la pipeline, quindi non faccio una mazza
//// Pipeline piena, partono i calcoli
80 4 istruzioni --> un singolo colpo di clock: BAM, BAM, BAM, BAM
90 4 istruzioni --> un singolo colpo di clock: BAM, BAM, BAM, BAM
100 4 istruzioni --> un singolo colpo di clock: BAM, BAM, BAM, BAM
110 4 istruzioni --> un singolo colpo di clock: BAM, BAM, BAM, BAM
120 4 istruzioni --> un singolo colpo di clock: BAM, BAM, BAM, BAM
130 RISULTATO

Alla fine ci ho messo quasi la metà del tempo ad ottenere il risultato.
 
Ultima modifica:

Michele26

Bannato a Vita
3,716
264
CPU
Aspetto 4770k+612s con 2 CM red led | I5-2500K 3,7ghz+ Alpine 11plus | E5200 3,26ghz
Scheda Madre
Aspetto z87 | Asrock H67DE3 | ASUS P5KPL-AM
HDD
WD CaviarBlue 1TB | WD 250GB 7200rpm + 2x WD 1TB Intellipower | Maxtor 160GB
RAM
XMS3 8GB CL9 2000mhz | XMS3 16 GB CL9 1333mhz | Kingston 3GB CL5 892mhz
GPU
Boh | VGA Palit GTX 660 2GB OC Core 1085/1085MHz | Gigabyte GT430
Audio
Integrata 7.1 | integrata 7.1 | Integrata 7.1
Monitor
Tv lcd full hd 28"
PSU
Enermax Triathlor FC 700W | LC-POWER LC6600 600W | I Tech ITPS500 500w
Case
Aerocool Mechatron Window Edition | Vento TA-8 Series | I Tech IT113B
OS
Windows 7 ultimate x64 | Windows 7 ultimate x32

Wow 6 un Grande, è molto interessante seguire le tue risposte
 

Cavalleros

Utente Èlite
4,264
638
CPU
AMD Ryzen 5 1600
Scheda Madre
MSI B350 Tomahawk
HDD
Seagate Barracuda 7200 rpm 1 TB + Samsung SSD 870 EVO 1TB
RAM
Crucial Ballistix 16GB 3200 MHz
GPU
AMD Radeon RX 580 GAMING X 8G
Monitor
Samsung 24'' Full hd + AOC Gaming 24G2
PSU
FSP Fortron Raider S 550
Case
Cooler Master CM 590 III
OS
Windows 10
sei bravissimo a spiegare anche concetti difficili all'apparenza, quindi, una domanda fuori dagli schemi, perchè non mettere più pipiline?? (come per la cache)
 

attilorz

Utente Èlite
3,931
886
CPU
athlon 64 3200+ venice
Scheda Madre
DFI lanpary UT nf3 250GB
HDD
maxtor da 160 GB
RAM
256 MB corsair ddr 400 cl2
GPU
Nvidia FX 5500
Audio
disabilitata
Monitor
crt da 14"
PSU
enermax 400w (boh)
Case
1 scatola di 412s en plein air
OS
xp superlitted edition
ah mi è venuta in mente un'idea bislacca che si rifà a quella di cavalleros. è possibile mettere delle pipeline per le scene statiche (rendering ad esempio a 32 stadi) mentre se si gioca disabilitare queste ultime e abilitarne delle altre più corte (4 da 8 stadi per esempio) oppure tenerne una sola intera e quando si gioca fare in modo che la cpu ne veda 4 da 8 stadi
 
  • Mi piace
Reazioni: Ferro56

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!