In: Computer Science
For this assignment, you need to write a parallel program in C++ using OpenMP for vector addition. Assume A, B, C are three vectors of equal length. The program will add the corresponding elements of vectors A and B and will store the sum in the corresponding elements in vector C (in other words C[i] = A[i] + B[i]). Every thread should execute an approximately equal number of loop iterations. The only OpenMP directive you are allowed to use is:
#pragma omp parallel num_threads(no of threads)
The program should take the number of threads and the number of iterations from the user and divide the number of iterations between the threads. Note, if the number of iterations does not divide evenly into the number of threads your program should account for this. (Hint: If you have p threads, first (p - 1) threads should have the same input size and the last thread will take care of whatever the remainder portion.)
As an example, input vector A is initialized with its size to 10,000 and elements from 1 to 10,000. So, A[0] = 1, A[1] = 2, A[2] = 3, … , A[9999] = 10000. Vector B will be initialized to the same size with opposite inputs. So, B[0] = 10000, B[1] = 9999, B[2] = 9998, … , B[9999] = 1 Using above input vectors A and B, create output Vector C which will be computed as C[ i ] = A[ i ] + B[ i ]; You should check whether your output vector value is 10001 in every C[ i ].
#include<iostream>
#include <omp.h>
#include<vector>
#include<bits/stdc++.h>
using namespace std;
int main(){
#pragma omp parallel
{
int n,thread;
cin>>thread>>n;
omp_set_num_threads(thread);
int d = n%thread;
vector<int>
a(n);
vector<int>
b(n);
vector<int>
c(n);
int t= 1;
for(int i=0;i<n;i++){
a[i] = t;
b[i] = t;
t++;
}
cout<<endl;
reverse(b.begin(), b.end());
for(int i=0;i<n;i++){
}
cout<<endl;
int check = n+1;
for(int i=0;i<n;i++){
c[i] =
a[i]+b[i];
if(c[i] ==
check){
cout<<c[i]<<"
"<<"Yes"<<endl;
}
else{
cout<<c[i]<<"
"<<"NO"<<endl;
}
}
}
return 0;
}