私はBeowulfクラスタ上でMPIと並列プログラミングしています。我々は、シミュレーテッドアニーリングのための並列アルゴリズムを書いた。それはうまく動作します。シリアルコードよりも15倍高速な実行が期待されます。しかし、異なるアーキテクチャーやオペレーティングシステムでシリアルCコードを実行しただけで、性能測定のために異なるデータセットを持つことができました。このランダム関数をコードで使用しました。我々は両方のウィンドウとubuntu LinuxでGCCを使用します。私たちは、Linuxでの実行にはかなりの時間がかかることを知りました。その理由はわかりません。誰かがこのコードをLinuxやWindowsでgccでコンパイルして説明することができますか?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上で20倍遅く実行を取得します。デュアルブートwin + ubuntu linuxと同じアーキテクチャのマシンでテストされています。このランダム関数は、私たちのデータで表示したいもののボトルネックなので、私たちは助けが必要です。
linuxでこれをコンパイルするときにgccに渡すコマンドラインオプションと、どのオプションがウィンドウで使われていますか? –
"gcc -o rand rand.c -lm" 両方のシステムで。 – Zec
乱数ジェネレータがどのようなものになっても、プログラム実行ごとに** ** 1回**初期化してください。 ** ONCE ONLY!** – pmg