Come ottenere l’utilizzo della CPU al 100% da un programma C.

Questa è una domanda piuttosto interessante quindi lasciatemi ambientare la scena. Lavoro al National Museum of Computing e siamo appena riusciti a far funzionare un super computer Cray Y-MP EL dal 1992, e vogliamo davvero vedere quanto velocemente può andare!

Abbiamo deciso che il modo migliore per farlo era scrivere un semplice programma C che calcolasse i numeri primi e mostrasse quanto tempo ci è voluto per farlo, quindi esegui il programma su un PC desktop moderno e veloce e confronta i risultati.

Abbiamo rapidamente trovato questo codice per contare i numeri primi:

#include  #include  void main() { clock_t start, end; double runTime; start = clock(); int i, num = 1, primes = 0; while (num <= 1000) { i = 2; while (i <= num) { if(num % i == 0) break; i++; } if (i == num) primes++; system("clear"); printf("%d prime numbers calculated\n",primes); num++; } end = clock(); runTime = (end - start) / (double) CLOCKS_PER_SEC; printf("This machine calculated all %d prime numbers under 1000 in %g seconds\n", primes, runTime); } 

Che sul nostro laptop dual-core con Ubuntu (The Cray gira UNICOS), ha funzionato perfettamente, ottenendo il 100% di utilizzo della CPU e circa 10 minuti circa. Quando sono tornato a casa ho deciso di provarlo sul mio moderno PC da gioco esagonale, ed è qui che arrivano i nostri primi numeri.

Ho adattato per la prima volta il codice per l’esecuzione su Windows poiché questo è ciò che il PC da gioco stava usando, ma è stato rattristato nel constatare che il processo aveva solo il 15% circa della potenza della CPU. Ho pensato che Windows fosse Windows, quindi ho avviato un Live CD di Ubuntu pensando che Ubuntu avrebbe permesso al processo di funzionare con tutto il suo potenziale come aveva fatto prima sul mio portatile.

Tuttavia ho solo il 5% di utilizzo! Quindi la mia domanda è: come posso adattare il programma per l’esecuzione sulla mia macchina da gioco su Windows 7 o Linux live con il 100% di utilizzo della CPU? Un’altra cosa che sarebbe grande ma non necessaria è se il prodotto finale può essere un file .exe che può essere facilmente distribuito ed eseguito su macchine Windows.

Molte grazie!

PS Naturalmente questo programma non ha funzionato davvero con i processori specializzati di Crays 8, e questo è un altro problema … Se sai qualcosa sull’ottimizzazione del codice per lavorare sui computer Cray degli anni ’90, anche i super computer ci danno un grido!