int main() { FILE *f = fopen("outtiny.txt", "w"); if(f == NULL) { printf("Could not initialize file\n"); return -1; } fprintf(f, "\t1 core\t4 core\n"); for(int N = 1; N < 10000; N += 1) { if(N % 10000 == 0) printf ("%d\n", N); struct timespec start, end; int* array = generate_rand_array(N); if(array == NULL) { printf("Not enough memory\n"); return -1; } clock_gettime(CLOCK_MONOTONIC, &start); radix_sort(array, N); clock_gettime(CLOCK_MONOTONIC, &end); fprintf(f, "%d\t", N); fprintf(f, "%lf\t", (double)(diff(start, end).tv_nsec) / 1000000000.0); clock_gettime(CLOCK_MONOTONIC, &start); radix_sort_parallel(array, N); clock_gettime(CLOCK_MONOTONIC, &end); fprintf(f, "%lf\n", (double)(diff(start, end).tv_nsec) / 1000000000.0); free(array); } fclose(f); return 0; }
int main(int argc, char **argv) { if (argc < 4 && argc > 5) { fprintf(stderr, "Usage: %s - size flag platform\n", __FILE__); exit(EXIT_FAILURE); } double *A, *x, *pA; char *uplo, *trans, *diag; int size, incx, flag; unsigned int i, j; struct timeval tv1, tv2; FILE *fd_brut, *fd_opt, *fd_blas; /* Teste vor rula doar pentru cazul de baza */ uplo = "U\0"; trans = "N\0"; diag = "N\0"; size = atoi(argv[1]); flag = atoi(argv[2]); incx = 1; A = malloc(size * size * sizeof(double)); x = malloc(size * sizeof(double)); generate_rand_matrix(A, size, uplo); generate_rand_array(x, size); /* Rezultatele vor fi salvate in fisiere specifice pentru fiecare platforma, * pentru a fi mai apoi prelucrare de gnuplot.*/ char filenamebrut[30], filenameopt[30], filenameblas[30]; strcpy(filenamebrut, argv[3]); strcpy(filenameopt, argv[3]); strcpy(filenameblas, argv[3]); if (flag == 1) { printf("Optimized version with flags\n"); strcat(filenamebrut, "_dtrmv_brut_flag.dat"); fd_brut = fopen(filenamebrut, "a+"); strcat(filenameopt, "_dtrmv_opt_flag.dat"); fd_opt = fopen(filenameopt, "a+"); strcat(filenameblas, "_dtrmv_blas_flag.dat"); fd_blas = fopen(filenameblas, "a+"); } else { strcat(filenamebrut, "_dtrmv_brut.dat"); fd_brut = fopen(filenamebrut, "a+"); strcat(filenameopt, "_dtrmv_opt.dat"); fd_opt = fopen(filenameopt, "a+"); strcat(filenameblas, "_dtrmv_blas.dat"); fd_blas = fopen(filenameblas, "a+"); } pA = malloc(size * sizeof(double)); for (i = 0; i < size; i++) { pA[i] = x[i]; } tv1 = get_time(); dtrmv(uplo, trans, diag, &size, A, &size, pA, &incx); tv2 = get_time(); printf("dtrmv_brut finished in %lf milisec\n", get_elapsed_time_milisec(&tv1, &tv2)); fprintf(fd_brut, "%d\t %lf\n", size, get_elapsed_time_milisec(&tv1, &tv2)); free(pA); pA = malloc(size * sizeof(double)); for (i = 0; i < size; i++) { pA[i] = x[i]; } tv1 = get_time(); dtrmv_opt(uplo, trans, diag, &size, A, &size, pA, &incx); tv2 = get_time(); printf("dtrmv_opt finished in %lf milisec\n", get_elapsed_time_milisec(&tv1, &tv2)); fprintf(fd_opt, "%d\t %lf\n", size, get_elapsed_time_milisec(&tv1, &tv2)); free(pA); tv1 = get_time(); cblas_dtrmv(CblasRowMajor, CblasUpper, CblasNoTrans, CblasNonUnit, size, A, size, x, 1); tv2 = get_time(); printf("cblas_dtrmv finished in %lf milisec\n\n", get_elapsed_time_milisec(&tv1, &tv2)); fprintf(fd_blas, "%d\t %lf\n", size, get_elapsed_time_milisec(&tv1, &tv2)); fclose(fd_brut); fclose(fd_blas); fclose(fd_opt); free(A); free(x); return 0; }