Ich mache parallele Programmierung mit MPI auf Beowulf Cluster. Wir haben einen parallelen Algorithmus für simuliertes Annealing geschrieben. Es funktioniert gut. Wir erwarten 15-mal schnellere Ausführung als mit seriellem Code. Wir haben jedoch einige serielle C-Codes auf verschiedenen Architekturen und Betriebssystemen ausgeführt, nur um unterschiedliche Datensätze für die Leistungsmessung zu erhalten. Wir haben diese Random-Funktion in unserem Code verwendet. Wir verwenden GCC sowohl auf Windows als auch auf Ubuntu Linux. Wir haben herausgefunden, dass die Ausführung von Linux viel länger dauert und wir wissen nicht warum. Kann jemand diesen Code auf Linux und Windows mit gcc kompilieren und versuchen, mich zu erklären.GCC Leistung
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main (int argc, char** argv){
double Random();
int k,NUM_ITERATIONS = 10;
clock_t start_time = clock();
NUM_ITERATIONS=atoi(argv[1]);
// iniciranje random generatora
srand(time(NULL));
for(k=0; k<NUM_ITERATIONS; k++){
double raa = Random();
}
clock_t end_time = clock();
printf("Time of algorithm execution: %lf seconds\n", ((double) (end_time - start_time))/CLOCKS_PER_SEC);
return 0;
}
// generate random number bettwen 0 and 1
double Random(){
srand(rand());
double a = rand();
return a/RAND_MAX;
}
Wenn ich es mit 100 000 000 als Argument für NUM_ITERATIONS auszuführen, erhalte ich 20-mal langsame Ausführung auf Linux als unter Windows. Getestet auf der Maschine mit der gleichen Architektur mit Dual Boot Win + Ubuntu Linux. Wir brauchen Hilfe, da diese Zufallsfunktion ein Flaschenhals für das ist, was wir mit unseren Daten zeigen wollen.
Welche Befehlszeilenoptionen übergeben Sie an gcc, wenn Sie dies in Linux kompilieren und welche Optionen in Windows verwendet werden. –
"gcc -o rand rand.c -lm" Auf beiden Systemen. – Zec
Welchen Zufallsgenerator Sie auch haben, initialisieren Sie ihn ** einmal ** pro Programmlauf. ** Nur einmal! ** – pmg