Write a parallel program using MPI (and not OpeMP) to accomplish the same as the following serial program. For the following serial program the user enters a line and the program outputs the number of occurrences of each printable character (but not the space or tab character). For the parallel program if we have p processes we should divide the line into p segments and let each process counts the characters of its segment #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, processes, n, start, end; int count[ASCIIs], my_rank, segment, p; printf("Enter a line not larger than 1000 characters.\n"); fgets(letters, atmost,stdin); printf("How many segments?: "); scanf("%d", &processes); //To make the length of the divisible by processes: while(strlen(letters) % processes != 0) strcat(letters, " "); n = strlen(letters); for(i = 0; i < ASCIIs; i++) total_count[i] = 0; for(p = 0; p < processes; p++) { my_rank = p; segment = n / processes; 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\n", 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]]++; } Enable GingerCannot connect to Ginger Check your internet connection or reload the browserDisable in this text fieldRephraseRephrase current sentence2Edit in Ginger× Please give proper explanation and typed answer only.
Write a parallel
#include<stdio.h>
#include<stdlib.h>
#include <string.h>
#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, processes, n, start, end;
int count[ASCIIs], my_rank, segment, p;
printf("Enter a line not larger than 1000 characters.\n");
fgets(letters, atmost,stdin);
printf("How many segments?: ");
scanf("%d", &processes);
//To make the length of the divisible by processes:
while(strlen(letters) % processes != 0) strcat(letters, " ");
n = strlen(letters);
for(i = 0; i < ASCIIs; i++)
total_count[i] = 0;
for(p = 0; p < processes; p++)
{
my_rank = p;
segment = n / processes;
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\n", 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]]++;
}
or reload the browserDisable in this text fieldRephraseRephrase current sentence2Edit in Ginger×
Trending now
This is a popular solution!
Step by step
Solved in 2 steps