コード例 #1
0
ファイル: dot_product.c プロジェクト: hecrj/par
int main(int argc, char **argv) {
    struct timeval start;
    struct timeval stop;
    unsigned long elapsed;
    double result;

    double *B = malloc(size*sizeof(double));

    tareador_ON ();

    int i;

    tareador_start_task("init_A");
    for (i=0; i< size; i++) A[i]=i;
    tareador_end_task();

    tareador_start_task("init_B");
    for (i=0; i< size; i++) B[i]=2*i;
    tareador_end_task();

    gettimeofday(&start,NULL);

    dot_product (size, A, B, &result);

    tareador_OFF ();

    gettimeofday(&stop,NULL);
    elapsed = 1000000 * (stop.tv_sec - start.tv_sec);
    elapsed += stop.tv_usec - start.tv_usec;
    printf("Result of Dot product i= %le\n", result);
    printf("Execution time (us): %lu \n", elapsed);

    return 0;
}
コード例 #2
0
ファイル: multisort-tareador.c プロジェクト: Fibernalia/PAR
void multisort(long n, T data[n], T tmp[n]) {
       
        if (n >= MIN_SORT_SIZE*4L) {
                // Recursive decomposition

	        tareador_start_task("RecursiveMultisort");
	       
                multisort(n/4L, &data[0], &tmp[0]);

                multisort(n/4L, &data[n/4L], &tmp[n/4L]);

                multisort(n/4L, &data[n/2L], &tmp[n/2L]);

                multisort(n/4L, &data[3L*n/4L], &tmp[3L*n/4L]);

                merge(n/4L, &data[0], &data[n/4L], &tmp[0], 0, n/2L);
                merge(n/4L, &data[n/2L], &data[3L*n/4L], &tmp[n/2L], 0, n/2L);

                merge(n/2L, &tmp[0], &tmp[n/2L], &data[0], 0, n);

	        tareador_end_task("RecursiveMultisort");;

	} else {
		// Base case
                tareador_start_task("BaseCaseMultisort");
		basicsort(n, data);
                tareador_end_task("BaseCaseMultisort");
	}

}
コード例 #3
0
ファイル: multisort.c プロジェクト: CristianDavila/Par
void merge(long n, T left[n], T right[n], T result[n*2], long start, long length) {
        if (length < MIN_MERGE_SIZE*2L) {
		// Una tasca de tareador por cada llamada


                // Base case
#if _EXTRAE_
                Extrae_event(PROGRAM, MERGE);
#endif
#if _TAREADOR_
		tareador_start_task("basemerge");
#endif
                basicmerge(n, left, right, result, start, length);
#if _TAREADOR_
		tareador_end_task();
#endif
#if _EXTRAE_
                Extrae_event(PROGRAM, END);
#endif
        } else {
                // Recursive decomposition
#if _TAREADOR_
		tareador_start_task("mergeinside1");
#endif
                merge(n, left, right, result, start, length/2);
#if _TAREADOR_
		tareador_end_task();
		tareador_start_task("mergeinside2");
#endif
                merge(n, left, right, result, start + length/2, length/2);
#if _TAREADOR_
		tareador_end_task();
#endif
        }
}
コード例 #4
0
ファイル: multisort-tareador.c プロジェクト: Fibernalia/PAR
void merge(long n, T left[n], T right[n], T result[n*2], long start, long length) {
  if (length < MIN_MERGE_SIZE*2L) {
    // Base case
    tareador_start_task("BaseCaseMerge");
    basicmerge(n, left, right, result, start, length);
    tareador_end_task("BaseCaseMerge");
  } 
  else {
    // Recursive decomposition
    tareador_start_task("RecursiveMerge");
    merge(n, left, right, result, start, length/2);
    merge(n, left, right, result, start + length/2, length/2);
    tareador_end_task("RecursiveMerge");
  }
}
コード例 #5
0
ファイル: dot_product.c プロジェクト: hecrj/par
void dot_product (long N, double A[N], double B[N], double *acc){
	double prod;

	*acc=0.0;
        int i;
 	for (i=0; i<N; i++) {
	    	tareador_start_task("dot_product");
		prod = my_func(A[i], B[i]);
		tareador_disable_object(acc);
		*acc += prod;
		tareador_enable_object(acc);
		tareador_end_task();
	}
}
コード例 #6
0
ファイル: heat-tareador.c プロジェクト: adeel1234/cpds-heat
int main( int argc, char *argv[] )
{
    unsigned iter;
    FILE *infile, *resfile;
    char *resfilename;

    // algorithmic parameters
    algoparam_t param;
    int np;

    double runtime, flop;
    double residual=0.0;

    // check arguments
    if( argc < 2 )
    {
	usage( argv[0] );
	return 1;
    }

    // check input file
    if( !(infile=fopen(argv[1], "r"))  ) 
    {
	fprintf(stderr, 
		"\nError: Cannot open \"%s\" for reading.\n\n", argv[1]);
      
	usage(argv[0]);
	return 1;
    }

    // check result file
    resfilename= (argc>=3) ? argv[2]:"heat.ppm";

    if( !(resfile=fopen(resfilename, "w")) )
    {
	fprintf(stderr, 
		"\nError: Cannot open \"%s\" for writing.\n\n", 
		resfilename);
	usage(argv[0]);
	return 1;
    }

    // check input
    if( !read_input(infile, &param) )
    {
	fprintf(stderr, "\nError: Error parsing input file.\n\n");
	usage(argv[0]);
	return 1;
    }
    print_params(&param);

    if( !initialize(&param) )
	{
	    fprintf(stderr, "Error in Solver initialization.\n\n");
	    usage(argv[0]);
	    return 1;
	}

    // full size (param.resolution are only the inner points)
    np = param.resolution + 2;
    
    tareador_ON();
    // starting time
    runtime = wtime();

    iter = 0;
    while(1) {
	switch( param.algorithm ) {
	    case 0: // JACOBI
	            residual = relax_jacobi(param.u, param.uhelp, np, np);
		    // Copy uhelp into u
                        int j;
                        char msg[256];
                        sprintf(msg, "Copyto[i=%d]", 0);
	 	        tareador_start_task(msg);
		    for (int i=0; i<np; i++) {
                        //tareador_disable_object(&j);
    		        for (j=0; j<np; j++)
	    		    param.u[ i*np+j ] = param.uhelp[ i*np+j ];
                        //tareador_enable_object(&j);
                    }
		        tareador_end_task();
		    break;
	    case 1: // RED-BLACK
		    residual = relax_redblack(param.u, np, np);
		    break;
	    case 2: // GAUSS
		    residual = relax_gauss(param.u, np, np);
		    break;
	    }

        iter++;

        // solution good enough ?
//        if (residual < 0.00005) break;

        // max. iteration reached ? (no limit with maxiter=0)
        if (param.maxiter>0 && iter>=param.maxiter) break;
    }

    // Flop count after iter iterations
    flop = iter * 11.0 * param.resolution * param.resolution;
    // stopping time
    runtime = wtime() - runtime;
    tareador_OFF();

    fprintf(stdout, "Time: %04.3f ", runtime);
    fprintf(stdout, "(%3.3f GFlop => %6.2f MFlop/s)\n", 
	    flop/1000000000.0,
	    flop/runtime/1000000);
    fprintf(stdout, "Convergence to residual=%f: %d iterations\n", residual, iter);

    // for plot...
    coarsen( param.u, np, np,
	     param.uvis, param.visres+2, param.visres+2 );
  
    write_image( resfile, param.uvis,  
		 param.visres+2, 
		 param.visres+2 );

    finalize( &param );

    return 0;
}
コード例 #7
0
ファイル: multisort.c プロジェクト: CristianDavila/Par
void multisort(long n, T data[n], T tmp[n]) {       
 if (n >= MIN_SORT_SIZE*4L) {
                // Recursive decomposition

		// Una tasca de tareador por cada llamada
#if _TAREADOR_
		tareador_start_task("multisort1");
#endif
                multisort(n/4L, &data[0], &tmp[0]);
#if _TAREADOR_
		tareador_end_task();
		tareador_start_task("multisort2");
#endif
                multisort(n/4L, &data[n/4L], &tmp[n/4L]);
#if _TAREADOR_
		tareador_end_task();
		tareador_start_task("multisort3");
#endif
                multisort(n/4L, &data[n/2L], &tmp[n/2L]);

#if _TAREADOR_
		tareador_end_task();
		tareador_start_task("multisort4");
#endif
                multisort(n/4L, &data[3L*n/4L], &tmp[3L*n/4L]);
#if _TAREADOR_
		tareador_end_task();
		tareador_start_task("merge1");
#endif
                merge(n/4L, &data[0], &data[n/4L], &tmp[0], 0, n/2L);

#if _TAREADOR_
                tareador_end_task();
                tareador_start_task("merge2");    
#endif
                merge(n/4L, &data[n/2L], &data[3L*n/4L], &tmp[n/2L], 0, n/2L);
#if _TAREADOR_
                tareador_end_task();
                tareador_start_task("merge3");    
#endif
                merge(n/2L, &tmp[0], &tmp[n/2L], &data[0], 0, n);
#if _TAREADOR_
                tareador_end_task();    
#endif

	} else {
		// Base case
#if _EXTRAE_
		Extrae_event(PROGRAM, SORT);
#endif
#if _TAREADOR_
		tareador_start_task("basesort");
#endif
		basicsort(n, data);
#if _TAREADOR_
		tareador_end_task();
#endif
#if _EXTRAE_
		Extrae_event(PROGRAM, END);
#endif
	}
}