Beowulf 클러스터에서 MPI와 병렬 프로그래밍을하고 있습니다. 시뮬레이션 어닐링을위한 병렬 알고리즘을 작성했습니다. 그것은 잘 작동합니다. 우리는 직렬 코드보다 15 배 빠른 실행을 기대합니다. 그러나 우리는 성능 측정을 위해 다양한 아키텍처와 운영 체제에서 직렬 C 코드를 실행하여 다른 데이터 세트를 사용할 수있었습니다. 우리는이 코드에서 임의의 함수를 사용했습니다. 우리는 GCC를 우분투 리눅스와 윈도우에서 사용합니다. 우리는 실행이 리눅스에서 훨씬 더 오래 걸린다는 것을 알아 냈습니다. 왜 그런지 알지 못합니다. 누군가 리눅스와 윈도우에서 gcc를 사용하여이 코드를 컴파일하고 설명해 줄 수 있습니까? 내가 NUM_ITERATIONS에 대한 인수로 100 000 000를 실행하면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;
}
, 나는 윈도우보다 리눅스에 20 배 느린 실행을 얻을. 듀얼 부팅 win + 우분투 리눅스와 동일한 아키텍처의 머신에서 테스트되었습니다. 우리는이 무작위 기능이 우리가 우리의 데이터로 보여주고 자하는 것에 병목이되므로 도움이 필요합니다.
linux에서 이것을 컴파일 할 때 gcc에 전달하는 명령 줄 옵션과 Windows에서 사용되는 옵션은 무엇입니까? –
"gcc -o rand rand.c -lm" 두 시스템 모두. – Zec
임의의 숫자 생성기로 끝나면 프로그램 실행 당 ** 한 번 ** 초기화하십시오. ** 한 번만! ** – pmg