aze*_*pdx 5 c compiler-construction gcc simulated-annealing mpi
我正在使用Beowulf集群上的MPI进行并行编程.我们为模拟退火编写了并行算法.它工作正常.我们希望执行速度比串行代码快15倍.但是我们在不同的体系结构和操作系统上执行了一些串行C代码,因此我们可以使用不同的数据集来进行性能测量.我们在代码中使用了这个Random函数.我们在windows和ubuntu linux上都使用GCC.我们发现linux上的执行需要更长的时间,而且我们不知道为什么.有人可以使用gcc在linux和windows上编译此代码并尝试解释我.
#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;
}
Run Code Online (Sandbox Code Playgroud)
如果我用100,000 000执行它作为NUM_ITERATIONS的参数,我在linux上的执行速度比在Windows上慢20倍.在具有相同架构的机器上进行测试,双启动win + ubuntu linux.我们需要帮助,因为这个随机函数是我们想要用我们的数据显示的瓶颈.
在Linux gcc上,srand(rand());随机函数内的调用占98%以上的时间.
生成随机数不需要,至少不在循环内.你已经打过srand()一次电话就足够了.
我会研究其他可用的随机数生成器。许多已经过充分测试,并且在执行速度和伪随机性方面都比标准库随机函数表现得更好。我还为研究生课程实现了自己的 RNG,但我不会在生产代码中使用它。选择经过社区审查的东西。 Random.org是测试您选择的任何 RNG 的良好资源。