Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <omp.h>
- //#include <time.h>
- #include <stdlib.h>
- #include <math.h>
- #define DEBUG 0
- #define NUM_THREAD 1
- #define VECT_LEN 32000
- void decrescente(int v[VECT_LEN])
- {
- for(int i = 0; i < VECT_LEN; i++)
- {
- v[i] = VECT_LEN - 1 - i;
- }
- }
- void insertionSort(int v[VECT_LEN], int index, int end)
- {
- for(int i = index; i < end; i++)
- {
- int tmp = v[i];
- int j = i - 1;
- while ((j >= index) && (v[j] > tmp))
- {
- v[j + 1] = v[j];
- j--;
- }
- v[j + 1] = tmp;
- }
- }
- int main()
- {
- int v[VECT_LEN];
- decrescente(v);
- /* Ordenação paralela (multithread), o array de 12 elementos
- * é ordenado em 3 threads, cada uma ordenando 4 elementos por
- * vez. */
- int blockSize = VECT_LEN / NUM_THREAD;
- for(int i=0; i<(int)log2(NUM_THREAD)+1; i++)
- {
- omp_set_num_threads(NUM_THREAD / (int)( pow(2.0,(double)i) ) );
- #pragma omp parallel
- {
- int actualThread = omp_get_thread_num();
- insertionSort( v, actualThread*blockSize, ((actualThread*blockSize)+blockSize) );
- }
- blockSize <<= 1;
- }
- #if DEBUG == 1
- printf("[ ");
- for(int i = 0; i < VECT_LEN; i++)
- {
- printf("%d ", v[i]);
- }
- printf("] \n");
- #endif
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement