Question: Write a parallel program using OpenMP to accomplish the same as the following serial program. For the following serial program the user enters a line

Write a parallel program using OpenMP to accomplish the same as the following serial program. For the following serial program the user enters a line of text and the program outputs the number of occurrences of each character. For the parallel program if we have n threads we should divide the line into n segments (and not into n characters) and let each thread counts the characters of its segment

//File name: a.c

#include

#include

#include

#define ASCIIs 127 //ASCII characters from 0 to 127

#define atmost 1000

char letters[atmost + 1]; //Extra location for the string terminator '\0'

int total_count[ASCIIs];

void find(int count[], int start, int end);

int main()

{

int i, thread_count, n, start, end;

int count[ASCIIs], my_rank, segment, p;

printf("Enter a line not larger than 1000 characters. ");

fgets(letters, atmost,stdin);

printf("How many segments?: ");

scanf("%d", &thread_count);

//To make the length of the divisible by thread_count:

while(strlen(letters) % thread_count != 0) strcat(letters, " ");

n = strlen(letters);

for(i = 0; i < ASCIIs; i++)

total_count[i] = 0;

for(p = 0; p < thread_count; p++)

{

my_rank = p;

segment = n / thread_count;

start = my_rank * segment;

end = start + segment;

find(count, start, end);

for(i = 0; i <= ASCIIs; i++)

total_count[i] += count[i];

}

for(i = 33; i < ASCIIs; i++)

if(total_count[i] != 0)

printf("Number of %c is: %d ", i, total_count[i]);

return 0;

}

void find(int count[], int start, int end)

{

int i;

for(i = 0; i < ASCIIs; i++)

count[i] = 0;

for(i = start; i < end; i++)

count[(int)letters[i]]++;

}

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!