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; }