Estoy haciendo programación en paralelo con MPI en clúster de Beowulf. Escribimos un algoritmo paralelo para el recocido simulado. Funciona bien. Esperamos una ejecución 15 veces más rápida que con el código de serie. Pero hicimos algunas ejecuciones del código serie C en diferentes arquitecturas y sistemas operativos solo para poder tener diferentes conjuntos de datos para la medición del rendimiento. Hemos utilizado esta función Aleatoria en nuestro código. Usamos GCC en ambas ventanas y ubuntu linux. Descubrimos que la ejecución lleva mucho más tiempo en linux, y no sabemos por qué. ¿Alguien puede compilar este código en Linux y Windows con GCC e intentar explicarme?Rendimiento de 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 ejecuto con 100 000 000 como argumento para NUM_ITERATIONS, me sale de ejecución 20 veces más lento en Linux que en Windows. Probado en máquina con la misma arquitectura con doble arranque win + ubuntu linux. Necesitamos ayuda ya que esta función Aleatoria es un cuello de botella por lo que queremos mostrar con nuestros datos.
¿Qué opciones de línea de comando le está pasando a gcc al compilar esto en Linux, y qué opciones se utilizan en Windows. –
"gcc -o rand rand.c -lm" En ambos sistemas. – Zec
Sea cual sea el generador de números aleatorios con el que termine, inicialícelo ** una vez ** por ejecución del programa. ** ¡SOLO UNA VEZ! ** – pmg