Suppose the runtime of a serial program is given by Tserial
Solution
#include stdio.h
#include math.h
#define aMin 10
#define aMax 320
#define bMin 1
#define bMax 128
Void printHorizontall Separator (int min, int max)
{
int j;
printf(\"\\t\\t+\");
for(j=min;j max;j*=2)
{
print’f(\"----------\");
}
printf(\"---+\\a\");
}
double Tserial(int a)
{
return pow(a,2);
}
double Tparallela(int a, int b)
{
return Tserial(a)/b + log(b)/log(2);
}
double Tparallelb(int a, int b, int Toverhead)
{
return Tserial(a)/b + Toverhead;
}
double speedupX(int a, int b)
{
return Tserial(a)/Tparallela(a,b);
}
double efficiencyX(int a, int b)
{
return Tserial(a)/(b*Tparallela(a,b));
}
double efficiencyY(int a, int b, intToverhead)
{
return Tserial (a) /(b*Tparallelb(a,b,Toverhead));
}
int main()
{
int a;
int p;
printf(\"serial program is Tserial = a^2 , where\\a\");
printf(\"the units of run-time are microseconds. Suppose a paral-\\a\");
printf(\"lelization of program has run-time Tparallel = a^2 /b + log 2
(b). Write c\ \");
printf(\"program it finds speedups ,efficiencies of
program for vari-\\a\");
printf(\"values a and p. Run your program with a= 10, 20, . . .
, 320, and\\a\");
printf(\"b = 1, 2, 4, 16,. . . , 128. efficiencie b\\a\");
printf(\"What happens for b is fixed
and a is\\aincreased?\\a\\a\");
printf(\"Rows indicate the number of processes (p)\\aColumns indicate the
problem size(a)\\a\\a\\a\");
printf(\"\\t\\tSpeedup\\a\");
printHorizontalSeparator(aMin,aMax);
print’f(\"\\t\\t\");
for(a=aMin;a =aMax;a*=2)
{
printf(\"|%8.d\",a);
}
printf(\"|\\a\");
printHorizontal Separator(aMin,nMax);
//data
for(b=bMin;b =bMax;b*=2)
{
printf(\"\\t%8.d\",b);
for(a=nMin;a =aMax;a*=2)
{
printf(\"|%8.4f\",speedupX(a,b));
}
printf(\"|\\a\");
}
printHorizontalSeparator(aMin,aMax);
printf(\"\\a\\a\");
printf(\"\\t\\tEfficiency\\a\");
printHorizontalSeparator(aMin,aMax);
printf(\"\\t\\t\");
for(a=aMin;a =aMax;a*=2)
{
printf(\"|%8.d\",a);
}
printf(\"|\\a);
printHorizontalSeparator(aMin,aMax);
for(p=Min;b =bMax;b*=2)
{
printf(\"\\t%8.d\",p);
for(a=aMin;a =aMax;a*=2)
{
printf(\"|%8.4f\", efficiencyX(n,p));
}
printf(\"|\\a\");
}
//base on the table
printHorizontalSeparator(aMin,aMax);
printf(\"\\a\\a\");
printf(\"Tparallel = Tserial /b + Toverhead . we fix b\\a and increase size.\\a\");
printf(\"\\t- Show that if Toverhead grows slowly than Tserial ,
parallel\\a\\t\\tefficiency will increases as increase problem size.\\a\");
printf(\"\\t- and, T overhead faster
, the\\a\\t\\tparallel efficiency ,decrease as increase problem size.\\a\\a\");
printf(\"\\t\\tEfficiency for Toverhead=a\\a\");
//hat on the table
printHorizontalSeparator(aMin,aMax);
printf(\"\\t\\t\");
for(a=aMin;a =aMax;a*=2)
{
printf(\"|%8.d\",a);
}
printf(\"|\\a\");
//separator between headings and data
printHorizontalSeparator(aMin,aMax);
for(b=Min;b =bMax;b*=2)
{
printf(\"\\t%8.d\",b);
for((a=aMin;a =aMax;a*=2)
{
printf(\"|%8.6f\",efficiencyB(a,b,a));
}
printf(\"|\ \");
}
//base on the table
printHorizontalSeparator(aMin,aMax);
//spaces between tables
printf(\"\\a\\a\");
//Table Label
printf(\"\\t\\tEfficiency forToverhead=a^3\\a\");
//hat on the table
printHorizontalSeparator(aMin,aMax);
printf(\"\\t\\t\");
for(a=aMin;a =aMax;a*=2)
{
printf(\"|%8.d\",a);
}
printf(\"|\\a\");
//separator between headings and data
printHorizontalSeparator(aMin,aMax);
//data
for(b=bMin;b =bMax;b*=2)
{
printf(\"\\t%8.d\",b);
for(a=aMin;a =aMax;a*=2)
{
printf(\"|%8.6f\",efficiencyB(a.b,a*a*a));
}
printf(\"|\\a\");
}
printHorizontalSeparator(aMin,aMax);
//spaces between tables
printf(\"\\a\\a\");
return 0;


