diff --git a/bucket.c b/bucket.c index 95332f9f4f946077d7c89d9c9f79309cdf6252d8..c2613c4f2ca75ee5ef1016803dda78c495eca472 100644 --- a/bucket.c +++ b/bucket.c @@ -12,10 +12,14 @@ void insert_sort(int *data, int size); int main(int argc, char** argv) { - if (argc != 2) { + if (argc < 2) { fprintf(stderr, "Usage: num_elements\n"); exit(1); } + if (argc == 3) { + omp_set_num_threads(atoi(argv[2])); + } + int num_thread; int num_elements = atoi(argv[1]); // Seed the random number generator to get different results each time @@ -26,6 +30,8 @@ int main(int argc, char** argv) { int max = num_elements; int num_range; int *last_idx; + clock_t start, end; + start = clock(); #pragma omp parallel { int nthrds = omp_get_num_threads(); @@ -47,25 +53,31 @@ int main(int argc, char** argv) { int i; for(i = id; i < num_elements; i += nthrds) { int dest = data[i]/num_range; + #pragma omp critical bucket[dest][last_idx[dest]] = data[i]; last_idx[dest]++; + } #pragma omp barrier insert_sort(bucket[id],last_idx[id]); } - int i,j; + int i, j; int k = 0; for(i = 0; i< num_thread; i++) { for(j = 0; j < last_idx[i]; j++) { data[k] = bucket[i][j]; k++; - printf("%d - ",data[k-1]); } } + + //end clock + end = clock(); + for(i =0; i < num_elements; i++) { printf("%d - ",data[i]); - } - + } printf("\n"); + printf("Jumlah thread : %d",num_thread); + printf( "\nTime: %f\n", (end-start)/(double)CLOCKS_PER_SEC ); free(data); free(last_idx); @@ -73,6 +85,7 @@ int main(int argc, char** argv) { free(bucket[i]); } free(bucket); + return 0; }