Je suis en train de faire de la programmation parallèle avec MPI sur le cluster Beowulf. Nous avons écrit un algorithme parallèle pour le recuit simulé. Ça fonctionne bien. Nous nous attendons à une exécution 15 fois plus rapide qu'avec le code série. Mais nous avons fait quelques exécutions de code C en série sur différentes architectures et systèmes d'exploitation juste pour que nous ayons différents ensembles de données pour la mesure de la performance. Nous avons utilisé cette fonction aléatoire dans notre code. Nous utilisons GCC sur Windows et Ubuntu Linux. Nous avons compris que l'exécution prend beaucoup plus de temps sur les linux, et nous ne savons pas pourquoi. Quelqu'un peut-il compiler ce code sur linux et windows avec gcc et essayer de m'expliquer.Performance GCC
#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;
}
Si je l'exécute avec 100 000 000 comme argument pour NUM_ITERATIONS, je reçois 20 fois plus lent exécution sur linux que sur Windows. Testé sur machine avec la même architecture avec dual boot win + ubuntu linux. Nous avons besoin d'aide car cette fonction aléatoire est un goulot d'étranglement pour ce que nous voulons montrer avec nos données.
Quelles options de ligne de commande passez-vous à gcc lors de la compilation sous Linux, et quelles sont les options utilisées dans Windows. –
"gcc -o rand rand.c -lm" Sur les deux systèmes. – Zec
Quel que soit le générateur de nombres aléatoires avec lequel vous vous retrouvez, initialisez-le ** une fois ** par programme. ** ONCE ONLY! ** – pmg