Beowulf クラスターで MPI を使って並列プログラミングを行っています。シミュレーテッド・アニーリングのための並列アルゴリズムを書きました。それは正常に動作します。シリアル コードよりも 15 倍速い実行が期待されます。ただし、パフォーマンス測定用に異なるデータ セットを使用できるように、さまざまなアーキテクチャとオペレーティング システムでシリアル C コードを実行しました。この Random 関数をコードで使用しました。Windows と ubuntu Linux の両方で GCC を使用しています。Linux では実行に時間がかかることがわかりましたが、その理由はわかりません。誰かが Linux と Windows で 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;
}
NUM_ITERATIONS の引数として 100 000 000 を指定して実行すると、Linux では Windows よりも 20 倍遅くなります。デュアル ブート win + ubuntu linux を備えた同じアーキテクチャのマシンでテスト済み。このランダム関数は、データで表示したいもののボトルネックであるため、助けが必要です。