(Serial)
(Serial)
(Serial)
#include <stdio.h>
#include <math.h>
double f(double x) {
return sin(x); // Example function to integrate
}
return sum * h;
}
int main() {
double a = 0.0, b = M_PI;
int n = 1000000;
return 0;
}
OUTPUT
(Parallel)
#include <math.h>
#include <omp.h>
double f(double x) {
return sin(x);
}
return sum * h;
}
int main() {
double a = 0.0, b = M_PI;
int n = 1000000;
double result;
return 0;
}
OUTPUT
Question 2 :
(Part 17.2)
(a)
The loop can be parallelized by adding OpenMP pragmas:
(c)
The loop can be parallelized as follows:
(d)
The loop can be parallelized:
(e)
This loop cannot be parallelized because the break statement introduces a
dependency, preventing parallel execution.
(f)
The loop can be parallelized using a reduction clause:
dotp = 0;
#pragma omp parallel for reduction(+:dotp)
for (i = 0; i < n; i++) {
dotp += a[i] * b[i];
}
(g)
The loop can be parallelized:
(Part 17.9)
#include <stdio.h>
#include <omp.h>
#include <stdlib.h>
#define m 1000
#define p 1000
#define q 1000
int main() {
double **a = (double **)malloc(m * sizeof(double *));
double **b = (double **)malloc(p * sizeof(double *));
double *rowterm = (double *)malloc(m * sizeof(double));
double *colterm = (double *)malloc(q * sizeof(double));
printf("Rowterm results:\n");
for (int i = 0; i < m; i++) {
printf("%f ", rowterm[i]);
}
printf("\n");
printf("Colterm results:\n");
for (int i = 0; i < q; i++) {
printf("%f ", colterm[i]);
}
printf("\n");
return 0;
}
OUTPUT
rowterm results:
128.796752 126.939024 122.497299 128.270421 120.303006 129.170854 113.081271 128.496143 118
.298565 119.484874 126.637024 121.023447 123.013032 134.524843 125.303121 114.874910 117.64
4919 122.401168 125.044221 115.545938 121.295389 132.162724 123.644681 138.330020 116.93030
2 124.221105 119.179752 126.870641 136.979869 123.817357 130.734834 119.624317 124.319743 1
26.409701 116.129471 117.098825 129.220241 127.542850 119.644809 127.925351 127.329439 124.
821301 123.117980 119.975409 119.599373 122.070642 121.133866 118.352377 126.769494 133.950
534 130.865114 123.492529 124.770205
Question 3 :
#include <stdio.h>
#include <omp.h>
#include <stdlib.h>
int main() {
double **matrixA, **matrixB, **resultMatrix;
int row, col, iter;
return 0;
}
OUTPUT