
For this assignment you need to write a parallel
As an input vector A, initialize 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.
Input 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 ].
First, start with 2 threads (each thread adding 5,000 vectors), and then do with 4,and and 8
threads. Remember sometimes your vector size can not be divided equally by number of threads.
You need to slightly modify pseudo code to handle the situation accordingly. (Hint: If you have p
threads, first (p - 1) threads should have equal number of input size and the last thread will take
care of whatever the remainder portion.) Check the running time from each experiment and
compare the result. Report your findings from this project in a separate paragraph.
Your output should show team of treads do evenly distributed work, but big vector size might
cause an issue in output. You can create mini version of original vector in much smaller size of
100 (A[0] = 1, A[1] = 2, A[2] = 3, … , A[99] = 100) and run with 6 threads once and take a snap
shop of your output. And run with original size with 2, 4, and 8 threads to compare running times.

Trending nowThis is a popular solution!
Step by stepSolved in 4 steps with 3 images

- Topic: OpenMP #pragma omp parallel for and #pragma omp master (Distributed and Parallel Computing Lab) The master construct denotes a block that is only executed by the master thread. Note that there is no synchronization (implicit barrier) for the master construct. The other threads will skip over this block and continue processing without waiting for the master thread. Write a program that computes the average of a large array using a parallel for construct. While it is running using #pragma omp parallel for construct, also use a master construct (outside the for loop) to keep track of how many iterations have been executed and prints out a progress report. Q. The following code is what I have written so far, but the ave(rage) value at the end comes as zero, and the number of iteration was only one, which I don't think it reflects what this program is supposed to do. Please, modify my current code to meet the criteria explained above. #include <omp.h>#include…arrow_forwardprogramming language. > DynamicList +capacity : int //initialized to 10 + add(int index, Object o): boolean + remove(int index): boolean B2. Determine how many times the output statement is displayed in each of the following fragments. Whether the algorithm is O(n) or O(n²). a) for (int i=0; iarrow_forward4. Suppose we want to create a stack of names that vary in length. Why is it advantageous to store the names in separate areas of memory and then build the stack out of pointers to these names rather than allowing the stack to contain the names themselves?arrow_forward
- Is there a way to optimize the following multithreaded quick sort algorithm, in C? I am looking for suggestions to make it run faster. I am trying to get closer to the qsort function's time. I don't want anything too complicated, like thread pooling. Here is the code: #include <stdio.h>#include <stdlib.h>#include <errno.h>#include <string.h>#include <pthread.h>#include <time.h>#define SORT_THRESHOLD 40typedef struct _sortParams {char** array;int left;int right;int* threadsLeft; // A counter to keep track of how many more threads are available to be created.pthread_mutex_t* mutex;} SortParams;static int maximumThreads; /* maximum # of threads to be used */static void insertSort(char** array, int left, int right) {int i, j;for (i = left + 1; i <= right; i++) {char* pivot = array[i];j = i - 1;while (j >= left && (strcmp(array[j], pivot) > 0)) {array[j + 1] = array[j];j--;}array[j + 1] = pivot;}}/*** This function uses a mutex to…arrow_forwardWrite a C++ program that: (1) defines and implements a hash class that constructs a 15 element array (may be implemented using a vector, a deque, or a list, if you prefer), storing strings, using the following hash function: ((first_letter) + (second_letter) + (last_letter))% 15 (2) the driver program should: a. query the user for ten words and store them using the hash technique described above. b. print out the contents of each position of the array (or vector, deque, or whatever you used), showing vacant as well as filled positions. Remember, only 10 of the 15 positions will be filled. c. repeatedly query the user for a target word, hash the word, check for its inclusion in the list of stored words, and report the result. Continue doing this task until the user signals to stop (establish a sentinel condition).arrow_forwardTo solve the problem of mismatch between the speeds of computer and printer, we usually use a buffer. Computer writes data to the buffer, and then printers get data from buffer. Which data structure could be used to implement the buffer? (A) Stack (B) Queuearrow_forward
- Computer Networking: A Top-Down Approach (7th Edi...Computer EngineeringISBN:9780133594140Author:James Kurose, Keith RossPublisher:PEARSONComputer Organization and Design MIPS Edition, Fi...Computer EngineeringISBN:9780124077263Author:David A. Patterson, John L. HennessyPublisher:Elsevier ScienceNetwork+ Guide to Networks (MindTap Course List)Computer EngineeringISBN:9781337569330Author:Jill West, Tamara Dean, Jean AndrewsPublisher:Cengage Learning
- Concepts of Database ManagementComputer EngineeringISBN:9781337093422Author:Joy L. Starks, Philip J. Pratt, Mary Z. LastPublisher:Cengage LearningPrelude to ProgrammingComputer EngineeringISBN:9780133750423Author:VENIT, StewartPublisher:Pearson EducationSc Business Data Communications and Networking, T...Computer EngineeringISBN:9781119368830Author:FITZGERALDPublisher:WILEY





