Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <omp.h>
- #include <stdio.h>
- #include <stdlib.h>
- int main(int argc, char *argv[]) {
- int n = 8, m = 3;
- int k, j, i;
- int vector[8] = { 4, 8, 5, 2, 10, 6, 9, 11 };
- int *b;
- int *a;
- a = calloc(2 * n , sizeof(int));
- b = calloc(2 * n , sizeof(int));
- printf("\n");
- for (i = n; i < 2 * n; i++) {
- a[i] = vector[i - 8];
- }
- for (k = m-1; k >= 0; k--) {
- #pragma omp parallel for num_threads(1<<k)
- for (j = (1 << k); j <= ((1 << (k + 1)) - 1); j++)
- a[j] = a[2 * j] + a[2 * j + 1];
- }
- printf("A[1]=%d\n\n", a[1]);
- b[1] = a[1];
- for (k = 1; k <= m; k++) {
- #pragma omp parallel for num_threads(1<<k)
- for (j = (1 << k); j <= ((1 << (k + 1)) - 1); j++) {
- if (j % 2 == 1) {
- b[j] = b[(j - 1) / 2];
- } else {
- b[j] = b[j / 2] - a[j + 1];
- }
- }
- }
- for (i = 1; i < 2 * n; i++) {
- printf("B[%i]=%d \n", i, b[i]);
- }
- printf("\n");
- free(b);
- free(a);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement