示例#1
0
int main() 
{
    int n;
    int *array;
    int i,j,k,p;
    double st,et;
    FILE *insertomp;

double res_time[40];
p=0;
    
for(j=0;j<20;j++)
{
  n=pow(2,j);
  

    array = (int *)malloc(n*sizeof(int));
    for (i=0; i<n; i++)
        array[i] = i;

    for (i=0; i<n; i++) {
        int num1 = rand() % n;
        int num2 = rand() % n;
        int t = array[num1];
        array[num1] = array[num2];
        array[num2] = t;
    }

st=timerval();
for(k=0;k<1000;k++)
{
    merge(array,n);
}
et=timerval();

res_time[p]=n;
res_time[p+1] = et-st;
p=p+2;
}

insertomp= fopen("insertomp.txt","w+");
for(j=0;j<40;j=j+2)
{
fprintf(insertomp,"\n n=%f time=%f seconds ",res_time[j],res_time[j+1]);
}
/* Freeing Allocated Memory */
free(array);
fclose(insertomp);

return 0;
}
int main(int argc, char*argv[]) {
	int p, q, m, n, i,j,k;
	double c, d,row, column;
	long long int N = atoi(argv[1]);
	long long int M = atoi(argv[2]);

	double st, et;
	st = timerval ();
	
	k = 0;
	for (i=0; i<M; i++)
	{ 
		printf("\n");
		for (j=0; j<N; j++)
		{
			//for (k=0; k<4; k++)
			{
				k++;			
				in[i][j] = k;
				printf("\t in[%d][%d] = %d", i,j,k);
			}
		}
	}
	
	#pragma omp parallel //for schedule(static) num_threads(8) 
	{
	#pragma omp for
	// row operation 
	for(p=0; p < N; p++) {	
			for(n=0; n<N; n++){		
			c = (PI/N)*p*(n+0.5);
			if(p == 0)                
				row = cos(c)*1/sqrt(N);
			else
				row = cos(c)*sqrt(2)/sqrt(N);
			out1[p][n] = row;// cos term
			printf("sum calculated by thread %d= %f for q = %d.\n",omp_get_thread_num(),out1[p][n],p);
	        }
		}
	}
    #pragma omp parallel //for schedule(static) num_threads(8) 
	{
	#pragma omp for
	//column operation
	for(q=0; q < M; q++) {
			for(m=0; m<N; m++){		
			d = (PI/M)*q*(m+0.5);
			if(q == 0)                
				column = cos(d)*1/sqrt(M);
			else
				column = cos(d)*sqrt(2)/sqrt(M);
			out2[q][m] = column;//cos term
			printf("sum calculated by thread %d= %f for q = %d.\n",omp_get_thread_num(),out2[q][m],q);
        	}
			}
	}
	
	#pragma omp parallel //for schedule(static) num_threads(8) 
	{
	#pragma omp for
		for(p=0; p < N; p++)
	{
		printf("\n");
        for(q=0; q < M; q++)		
		{	
            for(n=0; n<N; n++) 
            for(m=0;m<M; m++)
            out[p][q]+= in[n][m]*out1[p][n]*out2[q][m];
            //printf("[%d][%d]= %f \t",p,q, out[p][q]);
	}}
	}
 
	et = timerval ();
	printf ("\n\nIt took TIME of %f seconds \n", et - st);
 
 for(p=0; p < N; p++)
{
 printf("\n");
        for(q=0; q < M; q++)
                {
            
            printf("[%d][%d]= %f \t",p,q, out[p][q]);
        }}
}
int main(int argc, char *argv[])
{
	long long int N = atoi(argv[1]);
	long long int M = atoi(argv[2]);
	
	unsigned int i,k;
	int nr,nl;
	nr = 16;
	nl = 2;
	
	float *nsec;
	nsec = (float*) malloc(sizeof(float)*nr*nl);
	for(i=0;i<32;i++){
		nsec[i] = 0.5;
	}

	float c = 6.0;

	int dnr,dnl;

	dnr =16;
	dnl=2;

	float *dsec;
	dsec = (float*) malloc(sizeof(float)*dnr*dnl);
	for(i=0;i<32;i++){
		dsec[i] = 2.0;
	}

	
	for(i=0;i<M;i++)
        for(k=0;k<N;k++)
	{
		X[i][k] = 10.0;
	}

	float *u; // intermediate data
	u = (float*) calloc(dnr*2,sizeof(float));

	float unew;

	int j;
	float y = 0;	
	double st, et;
	st = timerval ();
	
	int stats[240];
	for(i = 0; i < omp_get_max_threads(); i++)
	stats[i] = 0;
	
	int total_stats = 0;
	
	for(i=0;i<M;i++)
	{
	    for(k=0;k<N;k++)
		{
			y = c * X[i][k];
			#pragma omp parallel for
			for(j=0;j<dnr;j++)
			{
				unew = X[i][k]- u[j*2]*dsec[j*2] - u[j*2+1]*dsec[j*2+1];	
				u[2*j+1]=u[2*j];	
				u[2*j]=unew;	
				y = y + u[j*2]*nsec[j*2] + u[j*2+1]*nsec[j*2+1];
				stats[omp_get_thread_num()] = stats[omp_get_thread_num()] + 4; 
			}
			Y[i][k] = y;	
			
		}
		
	}
	
        et = timerval ();
	printf ("\n\nIt took TIME of %f seconds \n", et - st);

	for(i=0;i<M;i++)
	{
	printf("\n");
        for(k=0;k<N;k++)
		{
		printf("%lf ", Y[i][k]);
		}
    }
    
	for(i = 0; i < omp_get_max_threads(); i++)
	{
	   printf("Stats[%d] = %d",i, stats[i]);
	   total_stats = total_stats + stats[i];
	}
	
	printf("\nOperations = %d, time = %f, ops = %lf ", total_stats, et-st, total_stats/(et-st));
	// release
	//free(X);
	//free(Y);
	free(nsec);
	free(dsec);
	free(u);

	return 0;
}