Esercizio su CPU che deve svolgere un programma

holly_golightly1
Ciao! Questo esercizio mi crea molti dubbi:

Data una CPU a 2 GHz e che richiede in media 4 cicli per svolgere un’operazione, calcolare il tempo necessario
ad eseguire un programma costituito da 100000 istruzioni sequenziali ed un ciclo di 10000 istruzioni (ripetuto
250 volte).

Insomma, il mio dubbio è relativo al fatto che non conosco quanti accessi deve fare in memoria la CPU per ogni operazione.
Come posso risolverlo?

Grazie mille!

Risposte
Rggb1
"holly_golightly":
Insomma, il mio dubbio è relativo al fatto che non conosco quanti accessi deve fare in memoria la CPU per ogni operazione.

Veramente, c'è scritto: in media 4 cicli per svolgere un'operazione.

holly_golightly1
Credo di essere confusa. Il ciclo macchina è l'intervallo di tempo in cui viene svolta un'operazione elementare e l'esecuzione di un'istruzione richiede un numero intero di cicli macchina.

Quindi, in questo caso, vi sono 100000 istruzioni da eseguire ripetute 250 volte. Posso semplicemente dividere il numero di istruzioni per il numero di cicli macchina?

Grazie!

Rggb1
"holly_golightly":
Credo di essere confusa. Il ciclo macchina è l'intervallo di tempo in cui viene svolta un'operazione elementare e l'esecuzione di un'istruzione richiede un numero intero di cicli macchina.

Non sei confuso. E nel nostro caso una istruzione mediamente viene eseguita in 4 cicli.

"holly_golightly":
Quindi, in questo caso, vi sono 100000 istruzioni da eseguire ripetute 250 volte. Posso semplicemente dividere il numero di istruzioni per il numero di cicli macchina?

Semmai prima moltiplicare, per trovare il numero totale dei cicli clock, e poi dividere. 100000 istruzioni x 4 cicli di clock l'una == 400000 cicli di clock; 250 cicli(*) di 10000 istruzioni di 4 cicli clock == 10000000 cicli di clock. Dal numero totale calcoli il tempo.

(*) Forse questo ti ha sviato: 250 "cicli di istruzioni" ovviamente non sono la stessa cosa di "cicli di clock"

holly_golightly1
Grazie mille per l'aiuto! Ora mi è più chiaro. Quindi, se ho ben capito, in totale 10,000,000 cicli di clock che corrispondono a circa 10ns?

Rggb1
"holly_golightly":
Quindi, se ho ben capito, in totale 10,000,000 cicli di clock che corrispondono a circa 10ns?

Nel totale devi considerare anche i cicli di clock necessari al compimento delle istruzioni sequenziali, che sono 400 mila in tutto.
Inoltre rivedi il calcolo dei tempi: 10 milioni di cicli di clock NON sono eseguiti in 10 nanosecondi.

apatriarca
Hai $10^5$ istruzioni sequenziali più $10^4$ istruzioni eseguite per $250$ volte in un ciclo. Sono quindi in totale $10^5 + 250 * 10^4 = 26 * 10^5$ istruzioni. Ci metti quattro cicli di clock per ogni istruzione e quindi ci vogliono in totale $4 * 26 * 10^5 = 1,04 * 10^7$ cicli di clock. Esegui $2000$ istruzioni al secondo per cui ci impieghi $1.04*10^7 / 2000 = 5200s$ che corrispondono a 1 ora 26 minuti e 40 secondi se non ho sbagliato qualche calcolo. Non mi è del tutto chiaro in che modo hai ottenuto quei 10 nanosecondi. Era forse il tempo necessario a tuo parere per eseguire un ciclo di clock o forse una istruzione? 10 nanosecondi sono troppo pochi in entrambi i casi.

holly_golightly1
Non avevo considerato che la CPU è da 2GHz ed avevo tralasciato questo dato. Grazie mille per avermi fatto notare dove ho sbagliato!

Posso chiedere ancora un'informazione? Questa volta relativa al trasferimento di dati tra un PC ed una chiavetta USB. Il testo dell'esercizio è il seguente:

"Un utente vuole copiare sulla propria chiavetta USB un file della dimensione di 1 GB. La chiavetta è dotata di un’interfaccia USB 2.0 (480 Mbps) e contiene una memoria flash capace di una velocità di 20 MB/s in lettura e 10 MB/s in scrittura. Sapendo che il file da copiare è memorizzato nell’hard disk del calcolatore (velocità di trasferimento di 120 MB/s), si determini il tempo complessivo necessario a portare a termine l’operazione".

Quando sono davanti ad esercizi di questo tipo tendo a mischiare dati necessari e non. Nella risoluzione ho considerato soltanto la dimensione del file (1GB) e, per calcolare il tempo di trasferimento, l'ho divisa (dopo le oppurtune conversioni) per 480Mbps. E' giusto procedere in questo modo oppure avrei dovuto considerare anche il tempo di scrittura della chiavetta?

Grazie davvero per l'aiuto!

edge1
Mi pare ma non son sicuro che dovresti prevedere il tempo di accesso all'HD più la scrittura verso la chiavetta.

holly_golightly1
Grazie per la risposta! Io invece ho considerato il collo di bottiglia tra le 4 velocità scritte. Ho svolto il calcolo usando la velocità minore.

holly_golightly1
Sempre a proposito di trasferimento dati, un utente desidera trasferire da A a B dei dati collegati da un bus esterno a 64 bit e 100 MHz. Calcolo del tempo necessario a trasferire 2GB di dati da A a B.

In questo caso, posso dire che il bus esterno trasferisce 64 bit in 1/100 di sec?

E' corretto?

Grazie!

Rggb1
Io invece ho considerato il collo di bottiglia tra le 4 velocità scritte. Ho svolto il calcolo usando la velocità minore.

Due considerazioni:
- la velocità minore del testo del problema non è quella della USB 2.0 (480 Mbps) ma semmai i 10 MB/sec della scrittura sulla flashram, prova a verificarlo;
- ovvio che il tempo è quasi esclusivamente quello dell'operazione più lenta; ma alcune operazioni vanno considerate.

Il problema assume che l'elaboratore
- legge da disco in memoria alla velocità di 120 MB/sec;
- invia dati da memoria a canale USB 2.0 alla velocità di 480 Mbps;
- scrive su flashram alla velocità di 10 MB/sec.

Quindi, io considererei anche la latenza (tempo) necessario ad arrivare al momento della scrittura. Ma sono un pignolo, quindi prendimi con le molle: in generale, considerare la velocità del mezzo più lento è sufficiente.

Rggb1
"holly_golightly":
Sempre a proposito di trasferimento dati, un utente desidera trasferire da A a B dei dati collegati da un bus esterno a 64 bit e 100 MHz. Calcolo del tempo necessario a trasferire 2GB di dati da A a B.

In questo caso, posso dire che il bus esterno trasferisce 64 bit in 1/100 di sec?

E' corretto?

No: $1/100$ di secondo significa velocità di clock di 100Hz... il BUS ha invece un clock da 100 MHz, è quindi un milione di volte più veloce ;)

holly_golightly1
Grazie mille!

Quindi il traferimento di 64 bit avviene in $1/100^6$ secondi... per cui il mio calcolo sarà:

$(2*1024*1024*1024*8 bit)/(64bit IN 100^(-6)sec) $ bit ossia il tempo sarà 0,00027 sec?

Rggb1
Presta più attenzione alle conversioni numeriche: $100^6$ è diverso da $100*10^6$ :-D

Un calcolo un po' più grezzo, un tanto al chilo: il BUS è a 64 bit, ovvero a parole di 4 byte; a 100 Mhz trasferisce 4 byte per milionesimo di secondo ovvero 400 milioni di byte al secondo; quindi per trasferire due giga ci metterà un po' più di 5 secondi.

Il tutto sempre con le assunzioni del caso: che i dati siano presenti sul canale senza ritardo, che la conversione a parole di 64 bit sia un'operazione di tempo trascurabile, ecc.

holly_golightly1
Ok! Ora è tutto chiaro! Grazie ancora per l'aiuto!

edge1
E il risultato ti torna giusto?

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.