示例#1
0
文件: main.c 项目: beng94/radix_sort
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;
}