fork download
  1. #include <omp.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4.  
  5. void parallel_prefix_sum(int *arr, int n) {
  6. int *temp = (int *)malloc(n * sizeof(int));
  7. if (!temp) {
  8. printf("Memory allocation failed.\n");
  9. return;
  10. }
  11.  
  12. // First phase: Perform a sequential scan in parallel
  13. #pragma omp parallel for
  14. for (int i = 0; i < n; i++) {
  15. if (i == 0) {
  16. temp[i] = arr[i];
  17. } else {
  18. temp[i] = arr[i] + temp[i - 1];
  19. }
  20. }
  21.  
  22. // Copy the results back into arr
  23. #pragma omp parallel for
  24. for (int i = 0; i < n; i++) {
  25. arr[i] = temp[i];
  26. }
  27.  
  28. free(temp);
  29. }
  30.  
  31. int main() {
  32. int n = 10;
  33. int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
  34.  
  35. printf("Original Array: ");
  36. for (int i = 0; i < n; i++) {
  37. printf("%d ", arr[i]);
  38. }
  39. printf("\n");
  40.  
  41. parallel_prefix_sum(arr, n);
  42.  
  43. printf("Prefix Sum Array: ");
  44. for (int i = 0; i < n; i++) {
  45. printf("%d ", arr[i]);
  46. }
  47. printf("\n");
  48.  
  49. return 0;
  50. }
  51.  
Success #stdin #stdout 0s 5316KB
stdin
Standard input is empty
stdout
Original Array: 1 2 3 4 5 6 7 8 9 10 
Prefix Sum Array: 1 3 6 10 15 21 28 36 45 55