diff --git a/omp_bucket b/omp_bucket index 36f09b9d2ef0b1b9f5598333201e7f95f2378f90..3e93d270673fe4e6d72f69658e25c67a55e92982 100755 Binary files a/omp_bucket and b/omp_bucket differ diff --git a/omp_bucket.c b/omp_bucket.c index ea3c453d26ad805649403567d6913c7b9ca3b102..f176507dc983a992ff09e791dfe1592d62932ca1 100644 --- a/omp_bucket.c +++ b/omp_bucket.c @@ -11,7 +11,11 @@ void insertion_sort(int* sorted_array, int size, int element_num); int main(int argc, char *argv[]) { int i; - time_t time_count; + + // Timer + struct timeval start, end; + float delta; + // Num of threads int thread_count = atoi(argv[1]); // Num of elements @@ -31,11 +35,14 @@ int main(int argc, char *argv[]) { memset (sorted_array, 0, (sizeof(int) * element_num)); // Do bucket sort - time_count = clock(); + gettimeofday(&start, NULL); #pragma omp parallel num_threads(thread_count) bucket_sort(sorted_array, element_num); - float final_time = (float) (clock()-time_count) / CLOCKS_PER_SEC *1000; + gettimeofday(&end, NULL); + + delta = ((end.tv_sec - start.tv_sec) * 1000000u + + end.tv_usec - start.tv_usec) / 1.e6; // Print result // printf("\n"); // for (i=0;i<element_num;i++){ @@ -43,7 +50,7 @@ int main(int argc, char *argv[]) { // } // printf("\n"); - printf("Time : %f ms\n", final_time); + printf("Time : %f s\n", delta); return 0; } diff --git a/omp_hello.c b/omp_hello.c deleted file mode 100644 index be44c4485205cab88b944b50f5f354beef16d78c..0000000000000000000000000000000000000000 --- a/omp_hello.c +++ /dev/null @@ -1,81 +0,0 @@ -#include <stdio.h> -#include <stdlib.h> -#include <omp.h> -#define MAX_VALUE 10000 - -void bucket_sort(int* sorted_array, int element_num); /* Thread function */ -void insertion_sort(int* sorted_array, int size); - - -int main(int argc, char *argv[]) { - - int i; - - // Num of threads - int thread_count = atoi(argv[1]); - // Num of elements - int element_num = atoi(argv[2]); - - int range = MAX_VALUE / thread_count; - - // Seed - srand(time(NULL)); - - // Bucket - int* bucket = (int *)malloc(sizeof(int) * element_num); - memset (bucket, 0, (sizeof(int) * element_num)); - - // Sorted Array - int* sorted_array = (int *)malloc(sizeof(int) * element_num); - memset (sorted_array, 0, (sizeof(int) * element_num)); - - // Do bucket sort - #pragma omp parallel num_threads(thread_count) - bucket_sort(sorted_array, element_num); - - for (i=0;i<element_num;i++){ - printf("%d\n", sorted_array[i]); - } - return 0; -} - -void insertion_sort(int* sorted_array, int size) -{ - int n, array[size], c, d, t; - - - int my_rank = omp_get_thread_num(); - int thread_count = omp_get_num_threads(); - - for (c = 0; c < n; c++) { - array[c] = rand() % (size*(thread_count+1)); - } - - // Sorting - for (c = 1 ; c <= n - 1; c++) { - d = c; - - while ( d > 0 && array[d] < array[d-1]) { - t = array[d]; - array[d] = array[d-1]; - array[d-1] = t; - - d--; - } - } - - memcpy(&array, sorted_array+(my_rank * size), size); - -} - -void bucket_sort(int* sorted_array, int element_num) { - int my_rank = omp_get_thread_num(); - int thread_count = omp_get_num_threads(); - - int bucket_size = element_num / thread_count; - - insertion_sort(sorted_array, bucket_size); - - - -}