Esempio n. 1
0
void toast::lapack::trmv ( char * UPLO, char * TRANS, char * DIAG, int * N, double * A, int * LDA, double * X, int * INCX ) {
  dtrmv ( UPLO, TRANS, DIAG, N, A, LDA, X, INCX );
  return;
}
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;
}