#include #include #include #include #define NUM_THREAD 3 typedef enum {ROCK, SCISSOR, PAPER} decision_t; char* toString[3] = {"ROCK", "SCISSOR", "PAPER"}; static int my_rand() { return omp_get_thread_num() ^ time(NULL); } int main(int argc, char** argv) { int i, tid; decision_t decision[NUM_THREAD]; decision_t my_result; decision_t winner, loser; int somebody_winner = 0, somebody_loser = 0; #pra..
#include #include #include #include #include #define N 100000 //array size #define M 1000000 //number area int data[N]; int buckets[M]; int *my_buckets[16]; void init_array(int a[N], int size) { int i; for( i = 0 ; i < size ; i++) { a[i] = rand()%M; } } void omp_thread(int a[N], int b[M]) { int i; #pragma omp parallel for num_threads(16) private(i) for(i = 0; i < N ; i++) { #pragma omp atomic b[..
#include #include #include int main(int argc, char** argv) { char prompt[][11] = {"ordinary", "gcc_atomic", "critical", "atomic"}; int select_item; if (argc < 2) return 0; select_item = atoi(argv[1]); int shared_value = 0; double t = omp_get_wtime(); #pragma omp parallel num_threads(16) { int i; if(select_item == 0) // ordinary { #pragma omp parallel for shared(shared_value) for( i = 0; i < 1000..
#include #include #define NDIM 1024 double a[NDIM][NDIM]; double b[NDIM][NDIM]; double c[NDIM][NDIM]; void mat_mul_ijk(double c[NDIM][NDIM], double a[NDIM][NDIM], double b[NDIM][NDIM],int level_num); void init_array(double a[NDIM][NDIM]) { int i, j; for(i = 0; i < NDIM ; i++) for(j = 0; j < NDIM ; j++) a[i][j] = rand()%100000 + 1; } void init_zero(double a[NDIM][NDIM]) { int i, j; for(i = 0; i <..
#include #include #include #include #include "timers.h" #define NDIM 1024 double a[NDIM][NDIM]; double b[NDIM][NDIM]; double c[NDIM][NDIM]; void matrix_print(double x[NDIM][NDIM]) { int i, j; for(i = 0; i < NDIM ; i++) { for(j = 0; j < NDIM ; j++) printf("%.2lf ",x[i][j]); printf("\n"); } } /* void matrix_multiply(double a[NDIM][NDIM], double b[NDIM][NDIM], double c[NDIM][NDIM], int num_threads)..
#include #include #include "timers.h" #define N 10 void share_aSum(int a[N]) { int i, sum = 0; timer_start(1); #pragma omp parallel for shared(sum) for(i = 0; i < N ; i++) { sum += a[i]; } timer_stop(1); printf("share_aSum : %lfsec / sum : %d\n",timer_read(1),sum); } void share_atomic_aSum(int a[N]) { int i, sum = 0; timer_start(2); #pragma omp parallel for shared(sum) for(i = 0; i < N ; i++) { ..
#include #include #define N 20 int main(int argc, char** argv) { int i, j; int a[N]; if(argc < 2) return 0; int nn = atoi(argv[1]); if(nn == 0) { #pragma omp parallel for shared(j) for(i = 0; i < N ; i++) { int sum = 0; for(j = 0; j < i ; j++) { a[i] += j; } } } else if (nn == 1) { #pragma omp parallel for private(j) for(i = 0; i < N ; i++) { int sum = 0; for(j = 0; j < i ; j++) a[i] += j; } } e..
#include #include #include "timers.h" #define N 1000 int main(int argc, char** argv) { int i,s,chunk; int a[N]; char prompt[][10] = {"static","dynamic","guided"}; if(argc < 2) return 0; s = atoi(argv[1]); chunk = atoi(argv[2]); timer_start(1); if(s == 0) { #pragma omp parallel for num_threads(10) schedule(static, chunk) for(i = 0; i < N ; i++) { int sum = 0, j; for(j = 0; j < i ; j++) { a[i] += ..