Newsgroup: it.comp.hardware.cpu
Titolo: domanda sulle cpu

ma con operazioni al secondo cosa si intende?   quali sono le operazioni che
fa una cpu via hardware?

 fa una cpu via hardware?
Tutte, se non le fa lei via hardware chi le fa???????


no no ok :) il senso era:  la moltiplicazione fatta da un essere umano ad
esempio la puoi dividere in piu parti(ok.. magari le cpu non la fanno come
noi.. vabbe') che magari il processore non le fa direttamente ma una alla
volta//  era questo il mio via hardware:  per fare un addizione ci mette la
stessa velocita' di una moltiplicazione?(o altro piu complicato)

 ha scritto nel messaggio
news:BS1W9.45108$0v.13...@news1.tin.it...

Se capisco bene la tua domanda, la risposta potrebbe essere quella di andare
a studiarsi il manuale di una CPU anche vecchia come l'8086, perchè certo
non è in un ng che uno può rispondere esaurientemente ad una domanda tanto
generica.
Volendo semplificare, la CPU esegue delle istruzioni che modificano dei
dati. Sia le istruzioni che i dati sono, inizialmente, sull'hard disk.
Quindi devono essere presi dall'hard disk, portati in RAM, presi dalla RAM
copiati in cache di 2° livello e in cache di 1° livello, infine devono
essere caricati nei registri. Finalmente la CPU farà la benedetta somma tra
il dato nel registro x con il dato nel registro y e lo scriverà nel registro
z. Molto probabilmente il dato nel registro z dovrà poi tornarsene in RAM e
alla fine su disco.
Ora, per fare tutto ciò la CPU ha dovuto eseguire un'enormità di operazioni,
per cercare il dato in cache di 1° livello, scoprire che non 'era, cercare
in cache di 2° livello, scoprire che non c'era, indirizzare la RAM, scoprire
che non c'era, attivare il driver dell'hard disk per cercare il dato su
disco e poi per fare tutte le copie per portarsi il dato in un registro.
Tutto ciò non è altro che una serie complessa di operazioni fatte sui
registri, nelle quali la CPU scrive un dato in un registro e compara un
risultato in un altro registro e poi decide il da farsi. Ogni volta che
scrive o che legge, è un operazione, ogni volta che trasferisce un dato da
un registro alla cache di 1° livello, è un'operazione, ogni volta che
aggiorna la cache di 2° livello con un dato, è un'operazione. Quando somma
x+y in z, è un'operazione, etc. etc.
La moltiplicazione è più complessa di una somma perchè (se non la si fa in
floating point) si devono fare una serie di somme e di shift, ogni somma e
ogni shift sono un'operazione.
Insomma, spero di averti dato un'idea della faccenda, ma per capire
sicuramente sarebbe meglio studiarsi l'architettura di una CPU e il suo
assembler.
Massimo


ok grazie :)

 ha scritto nel messaggio
news:XLhW9.66759$AA2.3...@news2.tin.it...



ecco.. era una cosa del genere che mi interessava :)

 ecco.. era una cosa del genere che mi interessava :)
Cioè dei numeri a caso? Potevi dirlo subito, posso dare i numeri con estrema
facilità :-)))
Massimo
PS: 5 cicli di clock per una moltiplicazione mi sembrano comunque pochi,
senza FPU. Ma certo che se si tratta di moltiplicare un numero per 2 allora
ci stiamo comodi :-)))


beh :)  mica devo progettare una cpu. m interessava sapere se ci metteva
tempi diversi per le diverse operazioni o no.

 ha scritto nel messaggio
news:QtCW9.71182$AA2.3...@news2.tin.it...

Allora, se permetti, la mia risposta era molto più valida :-))) perchè non
solo ti permetteva di capire quello, ma anche di capire che la CPU, anche
solo per fare una semplice somma, deve fare un'infinità di operazioni
"ausiliarie" assolutamente sproporzionate come numero rispetto alla somma
che viene fatta alla fine.
Il gioco funziona perchè in realtà la CPU non deve mai fare una semplice
somma o moltiplicazione, ma esegue decine di milioni di istruzioni più o
meno complesse al secondo, che danno vita a miliardi di operazioni unitarie,
del tipo di quelle che ti dicevo prima.
Massimo


massi ok..... comunque quella parte di decine di milioni di istruzioni in
piu le si posson saltare quando avremo memoria di massa direttamente nella
cpu :)))
visto che ci siamo... in che cosa sono a 128bit\256 le gpu delle schede
video?  cioe...  una cpu a 64bit puo usare numeri fino al valore di 18
miliardi di miliardi (calcolo a mente di 2 alla 64 :))) ) per fare
operazioni.... non basta bene o male per tutto(audio, grafica 3d...)? o son
128\256 bit di qualcosa che non centra?

 128\256 bit di qualcosa che non centra?
Allora, dire che una CPU è a 64 bit indica il fatto che la CPU opera con
registri di 64 bit di larghezza, lo stesso per una CPU da 32 bit o da 8 bit.
Dopo di che, anche una CPU da 8 bit può ipoteticamente gestire dati da 32
bit o da 64 bit, solo che li deve spalmare su 4 o 8 registri, ecco perchè,
per esempio, si parlava di doppia o quadrupla precisione all'epoca delle CPU
da 16 bit (precisione normale = dato da 16 bit, doppia = dato da 32 bit su
due registri, quadrupla....).
Allo stesso modo nulla vieta ad una CPU da 64 bit di trattare dati
(operandi) da 128 bit. E' chiaro (in modo molto semplificato) che una CPU da
64 bit può trattare quantità di dati doppie rispetto ad una da 32 bit e in
generale eseguire il doppio delle operazioni per ciclo (in modo molto
semplificato, ci sono un mucchio di altre cose di cui tener conto).
I 128 bit /256 bit delle GPU si riferiscono invece alla larghezza del bus
dati RAM video/GPU, cioè alla quantità di bit in parallelo che vengono mossi
tra memoria e processore video e non dice nulla sui registri interni della
GPU. Più il parallelismo è elevato, più, a parità di frequenza, si ha un
maggior flusso di dati e questa è una cosa fondamentale per i controller
video che devono "coprire" 1024x768 (esempio) pixel a 32 bit a 25 o 30 o 50
frame al secondo.
Come riferimento, un PIV o un K7 hanno un bus dati da 64 bit, ma questo non
vuol dire che sono CPU a 64 bit perchè lavorano comunque su registri da 32
bit.
Massimo


ok, quello l avevo intuito, ma qua:
http://www6.tomshardware.com/graphic/20021202/radeon_9500-02.html
c e' una differenza tra memory bus e chip technology?

 c e' una differenza tra memory bus e chip technology?
Quello che vogliono dire è che la tecnologia con cui è costruito il chip è
in grado di gestire i 256 bit del bus di memoria e poi al suo interno anche
un livello di parallelismo equivalente, ma in effetti, per alcuni (9500 e
NVidia), di fili tra GPU e memoria gliene hanno lasciati solo 128 e quindi
in pratica la velocità di trasferimento dati risulta dimezzata, rispetto
alla 9700 che oltre ad avere la capacità di gestire i 256 bit li gestisce
anche effettivamente (cioè ha anche il bus da 256 fili).
Massimo

 ogni shift sono un'operazione.
la moltiplicazione e' piu' complessa di una somma perche' e' cosi' e 
basta; il fatto del formato scelto per gli operandi puo' complicare o meno 
l'algoritmo necessario per la moltiplicazione. 
una volta scelto formato e algoritmo poi si ha ancora una gran scelta 
sulle possibili implementazioni in hardware e software. 
nel caso piu' semplice (8080/Z80/6502 ...) non c'e' un'istruzione di 
moltiplicazione e si deve fare ricorso a subroutine (che fanno somme, 
shift e compagnia bella). naturalmente ogni istruzione si porta dietro il 
tempo necessario per il fetch, la decodifica ...
per l'8086/88 (e molti dei successori) la moltiplicazione era fatta sempre 
in "software", ma con algoritmo microprogrammato, richiamato dall'istruzione 
di moltiplicazione. in altre parole somme e shift vengono fatti internamente
al processore (risparmiando byte di programma e tempo di esecuzione) e 
dall'esterno non c'e' modo di sapere che sta succedendo.
nei processori recenti si usano moltiplicatori hardware, che utilizzano 
vari schemi (tra cui, in hardware, anche quello che oggi viene definito 
"loop unrolling" dell'algoritmo di shift e somme), in modo da poter 
ottenere il prodotto in un numero di cicli estremamente basso.
le varie possibilita' hanno naturalmente costi diversi, e come sempre 
accade si cerca di trovare un compromesso tra costi e prestazioni.

 l'algoritmo necessario per la moltiplicazione.
Peccato, quello che hai detto dopo non è male, ma l'inizio è proprio un
disastro.
La moltiplicazione è più complessa di una somma perchè in binario si
effettua come una SERIE DI SOMME e di shift: allora è chiaro che siccome è
una serie di somme è per forza più complessa di una singola somma.
Poi, come avevo già giustamente detto, dipende anche molto dalla
moltiplicazione: se si moltiplica per due (o per una potenza di 2) non è per
niente più complicata di una somma (è un semplice shift a sinistra di 1 o 2
o 3  o 4 .... posizioni).
Poi, il modo in cui viene effettivamente implementata una moltiplicazione
non cambia le cose: sia nel caso brutale in cui si fa tutto con i registri,
sia nel caso in cui si lavora con il microcodice, sia nel caso in cui si usa
hardware ad hoc, la moltiplicazione non può prescindere dalla sua natura di
base, cioè di essere scomponibile in una serie si somme e shift, realizzati
con il loop unrolling o con quello che ti pare.
Al limite, nei casi più sofisticati, potremo dire che una moltiplicazione è
più complicata di una somma perchè richiede più transistor di una somma per
essere eseguita nello stesso numero di clock o viceversa che se vogliamo
usare lo stesso numero di transistor di una somma richiederà più cicli per
effettuare le somme e gli shift. Ma la sostanza non cambia.
Quindi, la prossima volta, prima di scrivere qualcosa di polemico che toglie
informazione invece di aggiungerne, pensaci due o tre volte e poi non farlo,
facevi più bella figura ad aggiungere semplicemente le informazioni che hai
messo dopo, che non contraddicevano affatto, ma piuttosto completavano e
confermavano, quello che avevo già detto io.
Massimo

 confermavano, quello che avevo già detto io.
di polemico non c'era nulla, solo il tentativo di mettere una pezza ad un 
paio di errorucci (gravi) sparsi qua e la'. se avessi voluto essere 
polemico avrei insistito maggiormente sul "se non la si fa in floating 
point", che non ha *alcun* senso. invece l'ho considerata una semplice svista
e non mi sono certo accanito (...perche' _era_ una svista, vero ?).

 e non mi sono certo accanito (...perche' _era_ una svista, vero ?).
Bella pezza, quando si dice la pezza è peggio del buco, che non c'era in
effetti, te lo sei solo inventato tu.
Sull'fpu ti riinvito a considerare il fatto che non stavo scrivendo un
trattato per l'MIT e quindi, visto anche il tipo di domanda, ho preferito
"forzare" il termine fpu ad includere tutte le logiche della CPU che
eseguono calcoli al di fuori della ALU, quelle logiche che una volta si
trovavano, per esempio, nel coprocessore matematico e quindi includere in
questo termine tutte le belle implementazioni circuitali che tu hai così
dottamente cercato di esporre. Questo in effetti era l'unico mio "errore",
in quanto, per non perdere tempo, ho fatto una forzatura, ed era l'unico che
avresti potuto bonariamente farmi notare e io ti avrei bonariamente risposto
quello che ti ho risposto adesso.
Ma a te interessa solo polemizzare e far bella mostra del tuo ego e delle
quattro conoscenze che hai, a me no, e quindi mi adatto all'interlocutore e
al livello della discussione.
Massimo


scusate se mi intrometto, ma quante somme devo fare per ottenere un buon
caffe'?
secondo me:
1- prendi l'acqua
2 - ci sommi il calore
3 - prendi il caffe' (gia' macinato)
4 - ci sommi l'acqua
5 - lo shifti nel bicchierino
6 - ci sommi lo zucchero
7 - esegui un loop a 10 cicli
8 - lo bevi.
forse č per quello che il mio pc fa un casino simile alla mia macchinetta
per il caffč......
Saluti
Bruno


Ecco uno che ha capito tutto senza fare discorsi complicati :), perň č
strano che il tuo pc faccia un casino simile a quello della macchinetta del
caffč, a meno che tu sia water-cooled!
Massimo

 ha scritto nel messaggio
news:b0m02j$r4m3c$1...@ID-60218.news.dfncis.de...

quasi:
2 ventole a 6000rpm su processore 1
2 ventole a 6000rpm su processore 2
1 ventola espulsione aria dall'alimentatore
1 ventola immissione aria nel case
1 ventola 4000rpm per raffreddamento dischi
1 ventola 5000rpm per raffreddamento masterizzatore DVD
in compenso d'inverno sto al caldo!
Saluti
Bruno

>> floating point) si devono fare una serie di somme e di shift, ogni
[...]
scusate se mi intrometto, ma vorrei aggiungere una piccolissima cosa, spero
di non dire cretinate. io so che la cpu sa compiere solo l'addizzione, in
quanto la moltiplicazione e' data da una serie di somme e shift (che vuol
dire shift?). la sottrazione viene ridotta ad una addizione cambiando gli 1
in 0 ed i 0 in 1 del minuendo (o sottraendo :-)))), ad esempio:
101001-(00)1011 --> 101001+110100. ecco cosi' ridotta la sottrazione ad
un'addizione. come succede per la moltiplicazione anche la divisione e' una
serie di sottrazioni, cioe' di somme...
ho detto qualche cavolata?
-- 
Ciao
Marchese Gianfranco
e-mail dgruma@NOPUBBLICITA'
tin.it
 (Da togliere NOPUBBLICITA' se vuoi
rispondermi in privato) sito internet personale:
www.turbo-pascal.cjb.net
  Tutto sul Turbo Pascal  1.5

 in compenso d'inverno sto al caldo!
Direi che con un investimento minimo probabilmente potresti tirarne fuori un
elicottero e usarlo per gli spostamenti, almeno quelli a breve raggio e
d'estate quando non lo usi come termoconvettore  :-))).
Ciao
Massimo

 ho detto qualche cavolata?
Quello che hai detto non è sbagliato, è il modo "naturale" e "brutale" e
"minimo" e anche "teorico" (teoria e progetto dei circuiti logici) di fare
quelle operazioni per una CPU che usa la logica booleana implementata con un
insieme minimo di porte NAND e NOR e tale sistema base può essere preso per
dare una risposta ad una domanda tanto generica quanto quella iniziale di
Wizzy.
Ciò di cui l'esimio PapeR dissertava (e che io avevo già contemplato nei
miei post precedenti) è che tale sistema non è il più efficiente quando i
numeri sono grossini (diversi da quelli del tuo esempio) e che con le CPU
attuali (ma per esempio anche con le calcolatrici da tasca) è meglio usare
metodi più sofisticati (o ancora più brutali, tipo tabelle), sia in termini
di algoritmo che di hardware, cioè di aree di silicio dedicate alla bisogna.
Quindi, quello che io dicevo all'inizio di tutta la faccenda quando Wizzy
ebbe la malaugurata idea di chiedere:
per fare un addizione ci mette la
stessa velocita' di una moltiplicazione?(o altro piu complicato)
era che ad una domanda così generica era impossibile dare una risposta
precisa, se non si precisavano un po' più di cose, tipo: Che moltiplicazione
e che somma? Su quanti bit? Con che hardware? Su quale CPU?
Poi cercavo anche di far capire che una CPU esegue pochissime operazioni
matematiche tipo somma e moltiplicazione come le intendiamo noi quando
facciamo il conto della spesa, in realtà fa cose infinitamente più complesse
anche solo per andare a prelevare un dato dall'hard disk, quindi  mi
sembrava una domanda un po' ingenua, un po' come chiedere che so, ma sulla
Terra è più alto un uomo o una donna? In principio è più alto un uomo, ma
poi è quasi sicuramente più alta una svedese di un siciliano, poi se la
donna ha 30 anni e l'uomo 5 è più alta la donna, se l'uomo è un nano e la
donna no, è più alta la donna .............. spero di essermi spiegato.
Ciao
Massimo

 fa una cpu via hardware?
Veramente una CPU fa tutte le operazioni
"via software"...
Immagino tu voglia sapere quali sono le
operazioni fondamentali, diciamo "atomiche",
eseguibili da una CPU.
Questo dipende dalla CPU, ma in generale si
possono fare delle categorie:
1) operazioni di confronto
2) operazioni di salto
3) operazioni di spostamento dati
4) operazioni logiche
4a) operazioni aritmetiche
4b) operazioni matematiche
Credo sia tutto, eventuali aggiunte sono benvenute.
Altra considerazione va fatta sui tipi di dati.
Tipicamente possono essere:
1) Byte (8 bit)
2) Interi (16 bit)
3) Interi lunghi (32 bit)
4) Interi veramente lunghi (64 bit)
5) Interi insolitamente lunghi (128 bit)
6) Virgola mobile (32 bit)
7) Doppia virgola mobile (64 bit)
8) Tripla (?) virgola mobile (96) bit
9) Vettori di interi (di cui sopra)
10) Vettori di elementi in virgola mobile (di cui sopra)
Altri?
Gli interi poi, possono essere con segno oppure
senza segno.
Nel primo caso, per esempio, un byte avra` un range
numerico tra -128 e 127, nel secondo tra 0 e 256.
Il formato con segno puo` essere complemento ad 1
oppure a 2 (piu` comune).
Infine esiste, sempre per gli interi, il formato BCD,
typicamente contenuto in byte, dove ogni 4 bit puo`
rappresentare un numero tra 0 e 9 (praticamente una
rappresentazione in base 10).
Le varie operazioni possono operare su tutti
i tipi di dati, oppure solo su alcuni, ma sempre
in maniera consistente (una somma fra interi uguali
e` possibile, ma non una fra un numero intero ed
un numero in virgola mobile, bisogna convertire
uno dei due prima).
Ad es. un salto alla locazione "X" necessita "X"
rappresentato con un intero di proprio dimensione,
senza segno. Un salto non potra` avere un numero
in virgola mobile come destinazione.
Una somma, invece, potrebbe essere realizzata in
"hardware" per tutti i tipi di dati (o solo per
alcuni).
In generale, pero`, non e` detto che tutte le
CPU supportino nativamente tutti i tipi di dati
ne` tutti i tipi di istruzioni (vedi ZISC).
Credo sia tutto, spero chiaro.
bye,
-- 
piergiorgio

 "minimo" e anche "teorico"
non e' per farti le pulci, ma quello da lui espresso e' il complemento ad 
uno ed il "giochino" di trasformare le somme in sottrazioni e viceversa 
funziona col complemento a due...  
per l'autore del testo quotato: per ottenere il complemento a due di un 
numero binario si invertono tutti bit e si somma uno. inoltre: lo shift 
non e' altro che lo spostamento di tutti i bit di uno o piu' posti a 
destra o a sinistra; ce la caviamo in fretta con qualche esempio:
detti b3 b2 b1 b0 i bit di una parola di 4 bit:
shift a destra 0,b3,b2,b1 (butto b0) 
shift a sinistra b2,b1,b0,0 (butto b3) 
poi ci sono varie varianti (rotazioni in cui il bit che esce ritorna 
dall'altro lato, shift aritmetici, in cui si conserva il bit piu' 
significativo per mantenere l'indicazione del segno) e spesso non si butta 
veramente il bit ma lo si salva da qualche parte. esempio: shift che salvano 
il bit nel flag di riporto, rotazioni che considerano il riporto uno dei bit 
dell'operando. naturalmente se il flag c'e': ad esempio nel MIPS non c'e'... 
pero' fai davvero prima ad esaminare un datasheet perche' dipende un po' 
troppo dal processore che consideri, a volte anche dalla versione (altro
esempio: le versioni piu' vecchie del 6502 non avevano un'istruzione di
rotazione).

 al livello della discussione.
e quindi se uno ti chiede: "ma con operazioni al secondo cosa si intende? 
quali sono le operazioni che fa una cpu via hardware?" tu che _non_ vuoi 
far bella mostra del tuo ego e delle quattro conoscenze che hai, 
rispondi con decine di righe parlando di tutte quelle che NON sono 
operazioni elementari invece che fare un elenco delle operazioni piu' 
comuni...