[英]GCC performance
我正在使用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;
}
如果我用100,000 000執行它作為NUM_ITERATIONS的參數,我在linux上的執行速度比在Windows上慢20倍。 在具有相同架構的機器上進行測試,雙啟動win + ubuntu linux。 我們需要幫助,因為這個隨機函數是我們想要用我們的數據顯示的瓶頸。
在Linux gcc上,調用srand(rand());
在隨機函數內占98%以上的時間。
生成隨機數不需要,至少不在循環內。 你已經調用了srand()
一次,這就足夠了。
我會研究其他可用的隨機數發生器。 許多存在已經過良好測試並且在執行速度和偽隨機性方面都比標准庫隨機函數表現更好。 我還為研究生課程實施了自己的RNG,但我不會在生產代碼中使用它。 選擇經過社區審查的東西。 Random.org是測試您選擇的任何RNG的良好資源。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.