#include #include #include #include #include #define N 100 void doWork(int w) { sleep(w); } int* initWork(int n) { double r; int* wA = (int *) malloc(sizeof(int)*n); int count = 0; // KILL for (int i = 0; i < n; i++) { wA[i] = i/(n-4); count+=wA[i]; //KILL printf("wA[%d] = %d, count = %d\n", i, wA[i], count); //KILL } return wA; } int main (int argc, char *argv[]) { int i; int *w = initWork(N); // time sequentially scheduled loop double t = omp_get_wtime( ); for (i = 0; i < N; i++) { doWork(w[i]); } t = omp_get_wtime( ) - t; printf("time for sequentially scheduled is %g\n", t); // time statically scheduled loop t = omp_get_wtime( ); #pragma omp parallel for for (i = 0; i < N; i++) { doWork(w[i]); } t = omp_get_wtime( ) - t; printf("time for statically scheduled is %g\n", t); // time statically scheduled loop with blocksize of 50 t = omp_get_wtime( ); #pragma omp parallel for schedule(static,50) for (i = 0; i < N; i++) { doWork(w[i]); } t = omp_get_wtime( ) - t; printf("time for static(50) scheduled is %g\n", t); // time statically scheduled loop with a blocksize of 1 t = omp_get_wtime( ); #pragma omp parallel for schedule(static,1) for (i = 0; i < N; i++) { doWork(w[i]); } t = omp_get_wtime( ) - t; printf("time for statically with a blocksize of 1 scheduled is %g\n", t); // time dynamically scheduled loop with default blocksize of 1 t = omp_get_wtime( ); #pragma omp parallel for schedule(dynamic) for (i = 0; i < N; i++) { doWork(w[i]); } t = omp_get_wtime( ) - t; printf("time for dynamic scheduled is %g\n", t); // time dynamically scheduled loop with blocksize of 50 t = omp_get_wtime( ); #pragma omp parallel for schedule(dynamic,50) for (i = 0; i < N; i++) { doWork(w[i]); } t = omp_get_wtime( ) - t; printf("time for dynamic(50) scheduled is %g\n", t); // time guided scheduled loop t = omp_get_wtime( ); #pragma omp parallel for schedule(guided) for (i = 0; i < N; i++) { doWork(w[i]); } t = omp_get_wtime( ) - t; printf("time for guided scheduled is %g\n", t); // time auto scheduled loop t = omp_get_wtime( ); #pragma omp parallel for schedule(auto) for (i = 0; i < N; i++) { doWork(w[i]); } t = omp_get_wtime( ) - t; printf("time for auto scheduled is %g\n", t); }