Questo sito contribuisce alla audience di

TEST ALU CPU in C++.

La stesura di un codice di test per la CPU in C++ può essere molto laboriosa. In questo intervento parlerò di come sia stato possibile sviluppare un breve, ma efficace benchmark di test per le unità ALU del microprocessore. Tutto questo è stato possibile grazie alla serie di Fibonacci.

Introduzione.
Come accennato nella premessa, in questo intervento discuteremo della realizzazione di un test per le unità ALU della CPU in linguaggio C++. Sicuramente, molti di voi hanno poca dimestichezza con un linguaggio di programmazione, ma se vi interessa come si costruiscono le fondamenta di un test, allora proseguite la lettura, altrimenti cambiate pagina!

Gli strumenti.
Per poter usufruire del test in C++ ho messo a disposizione il codice sorgente del Test ALU in C++, e il link al compilatore gratuito DEV-C++ 5.0.; Per poter vedere funzionante il benchmark proposto in quest pagine, bisogna manipolarlo con un compilatore C++, e la cosa non è poi così difficile!

Conoscere il linguaggio C++.
Prima di affrontare il codice sorgente, sarebbe opportuno, ma non indispensabile, leggere un buon testo sul C++, e precisamente: Lezioni di C++, Editore MC GRAW HILL Autore SMILEY JOHN.

Il download del compilatore DEV-C++ 5.0.
Ora, è giunto il momento di scaricare dal link http://www.bloodshed.net/ il compilatore gratuito DEV-C++ 5.0. Dopo aver eseguito correttamente il download, scegliete nuovo progetto, e con un operazione di copia ed incolla inserite il codice sorgente del test (presente più avanti in questa pagina).

L’avvio del test dal Menu ESEGUI.
Con un semplice esegui, opzione scelta dal menu esegui di DEV-C++ 5.0, avviate il test, e come per magia apparira il programma compilato; Adesso è il momento di sperimentare, e vi invito a farlo, poichè solo così potrete apprendere qualcosa! Una guida più didattica e completa sul test ALU CPU è presente nel sito http://www.megaoverclock.it.

Il codice sorgente del test.

————inizio codice————

//Programma di Grando Ruggero
//TEST CALCOLO IN ALU CON LA SERIE DI FIBONACCI RICORSIVA

#include //includo la libreria di visualizzazione
#include //includo la libreria della funzione time
#include
#include
#include
#include
#include
#include
#include
#include

using namespace std;

long fib (long); //prototipo di funzione
void outputline (const char *,const char *, const char*, const char *, int);

int main()
{
long N;
string verificatest;
string verificainse;
string leggidatabase;

cout << "TEST DI CALCOLO PER IL PROCESSORE, UNITA' ALU (operazioni con numeri interi)." << endl;
cout << "Calcolo con la serie di Fibonacci in grado di occupare al massimo i sistemi di calcolo piu' potenti." << endl;
cout << "Prima versione by Grando Ruggero";
cout << endl << endl;

cout << "Vuoi iniziare il test? (SI/NO)";
cin >> verificatest;
for (int i=0; i < verificatest.length(); i++) {
verificatest[i] = toupper (verificatest[i]);
}
while (verificatest == "SI") {

cout << "Il test calcolera' il tempo di esecuzione della serie di Fibonacci con" << " il numero 42." << endl;
int N=42;
time_t now = time (0); //nella variabile now inizia il tempo
cout << "Fibonacci (" << N << ") e' " << fib(N) << "nn";
time_t after = time (0); //nella variabile after è registrato il termine del calcolo di fibonacci
double seconds = difftime (after,now); //nella variabile seconds vi è la differenza in secondi tra i due test
cout << "Tempo totale di esecuzione richiesto dalla CPU in ALU " << seconds << " secondi" << endl << endl;

ofstream outsistemafile ("sistema.dat", ios::app);
if ( !outsistemafile )
{
cerr << "Il file non può essere aperto" << endl;
exit (1);
}

char CPU [30];
char SCHEDA [30];
char RAM [30];
char SISTEMA [30];
int TEST;
cout << "Per inserire i record scrivere OK" << endl;
cin >> verificainse;
for (int j=0; j < verificainse.length(); j++) {
verificainse[j] = toupper (verificainse[j]);
}
while (verificainse == "OK")
{
cout << "Inserisci il modello di processore senza spazi?"<< endl;
cin >> CPU;
cout << "Inserisci il modello di scheda madre?" << endl;
cin >> SCHEDA;
cout << "Inserisci la quantita' di ram di sistema?" << endl;
cin >> RAM;
cout << "Inserisci quale sistema operativo stai utilizzando per il test?" << endl;
cin >> SISTEMA;
cout << "Inserisci il tempo di esecuzione del test precedente del tuo sistema?" << endl;
cin >> TEST;
outsistemafile << CPU << ' ' << SCHEDA << ' ' << RAM << ' ' << SISTEMA << ' ' << TEST << 'n';

cout << "Se vuoi inserire un'altro record (digita OK), altrimenti premi un tasto per continuare." << endl;
cin >> verificainse;
for (int j=0; j < verificainse.length(); j++) {
verificainse[j] = toupper (verificainse[j]);
}
}
outsistemafile.close();
cout << "Vuoi visualizzare il database del sistema?";
cin >> leggidatabase;
for (int l=0; l< leggidatabase.length(); l++) {
leggidatabase[l] = toupper (leggidatabase[l]);
} //fine del ciclo for
while (leggidatabase == "SI")
{
cout << "Benissimo ecco la visualizzazione dei dati del database" << endl << endl;
ifstream outsistemafile ("sistema.dat", ios::in);
if (!outsistemafile) {
cerr << "Il file non può essere aperto";
exit (1);
}
cout << setiosflags (ios::left) << setw (19) << "PROCESSORE" << setw(15) << "SCHEDAMADRE" << setw(9)<< "MEMORIA" << setw (21)<< "SISTEMA OP." << setw (12)<< "RIS. TEST" << endl << endl;

while (outsistemafile >> CPU >> SCHEDA >> RAM >> SISTEMA >> TEST) {
outputline (CPU, SCHEDA, RAM, SISTEMA, TEST);
}
outsistemafile.close ();
cout << "Vuoi visualizzare nuovamente il database del test?";
cin >> leggidatabase;
for (int l=0; l< leggidatabase.length(); l++) {
leggidatabase[l] = toupper (leggidatabase[l]);
} //fine del ciclo for
}//fine del ciclo while

cout << "Vuoi iniziare di nuovo il test? ";
cin >> verificatest;
for (int i=0; i < verificatest.length(); i++) {
verificatest[i] = toupper (verificatest[i]);
} //fine del ciclo for

} // fine del ciclo while

cout << “Grazie per aver utilizzato il test”;

return 0;
} //fine del main

//Definizione della funzione ricorsiva di Fibonacci
long fib(long n)
{
if (n <= 2)
return 1;
else

return fib(n-1) + fib(n-2);
}
// Definizione della funzione outpuline
void outputline (const char *proc, const char *main, const char *mem, const char *sistop, int risult)
{
cout << setiosflags (ios::left) << setw (19) << proc << setw (15) << main << setw (9)<< mem << setw(24) <