These videos might hang your browser, sorry!
MultiCore
I8 Sum(I8 data)
{
I8 result=0,i;
for (i=1;i<=data;i++)
result+=i;
return result;
}
I8 MPSum(I8 data)
{
MPCmdStruct *tempm;
I8 result=0,i;
tempm=MPJob(&Sum,data>>1,0);
for (i=data>>1+1;i<=data;i++)
result+=i;
return result+MPJobResult(tempm);
}
#define SAMPLE_SIZE 100
U8 Test(I8 n,I8 fun(I8 n))
{
U8 i,val=0,start,end;
start=GetTimeStamp;
for (i=0;i<SAMPLE_SIZE;i++)
val+=fun(n);
end=GetTimeStamp;
PrintF("Val:%,d\r\n",val/SAMPLE_SIZE);
PrintF("$$FG,RED$$N:%9,d Cycles:%9,d$$FG$$\r\n",n,(end-start)/SAMPLE_SIZE);
return end-start;
}
#define NUM_TESTS 7
#define MAX_PERCENT 200
void DoIt()
{
I8 i,n,t1,t2,
h=Fs->win_pixel_width,
v=Fs->win_pixel_height;
double results[NUM_TESTS];
GrBitMap *base=GrAlias(Gs->grbase,Fs);
WbInvd;
for (i=0,n=10;i<NUM_TESTS;i++,n*=10) {
t1=Test(n,&Sum);
t2=Test(n,&MPSum);
results[i]=t2*100.0/t1;
PrintF("$$FG,GREEN$$Factor:%8.4f$$FG$$\r\n\r\n",results[i]);
}
PressAKey;
LtfClear;
base->color=BLUE;
for (i=0;i<MAX_PERCENT;i+=MAX_PERCENT/10) {
GrPrintF(base,0,v-ToDouble(i)/MAX_PERCENT*v-FONT_HEIGHT-1,"%3d%%",i);
GrLine(base,0,v-ToDouble(i)/MAX_PERCENT*v,h,v-ToDouble(i)/MAX_PERCENT*v);
}
for (i=0;i<NUM_TESTS-1;i++) {
base->color=RED;
base->pen_width=2;
GrLine3(base,i*h/(NUM_TESTS-1),v-results[i ]/MAX_PERCENT*v,0,
(i+1)*h/(NUM_TESTS-1),v-results[i+1]/MAX_PERCENT*v,0);
base->color=GREEN;
GrPrintF(base,i*h/(NUM_TESTS-1),v-FONT_HEIGHT,"10e%d",i+1);
GrLine(base,i*h/(NUM_TESTS-1),0,
i*h/(NUM_TESTS-1),v);
}
PressAKey;
GrClear;
GrDel(base);
}
DoIt;