86 lines
1.7 KiB
HolyC
Executable File
86 lines
1.7 KiB
HolyC
Executable File
I64 mp_n;
|
|
|
|
I64 MPSum(I64 my_mp_cnt)
|
|
{//We could use the formula n*(n+1)/2
|
|
I64 lo=mp_n*Gs->num/my_mp_cnt,
|
|
hi=mp_n*(Gs->num+1)/my_mp_cnt,
|
|
res=0,i;
|
|
for (i=lo;i<hi;i++)
|
|
res+=i;
|
|
return res;
|
|
}
|
|
|
|
I64 Sum(I64 n,I64 my_mp_cnt)
|
|
{
|
|
CJob *tmpm[MP_PROCESSORS_NUM];
|
|
I64 res=0,i;
|
|
mp_n=n+1;
|
|
for (i=0;i<my_mp_cnt;i++)
|
|
tmpm[i]=JobQue(&MPSum,my_mp_cnt,i,0);
|
|
for (i=0;i<my_mp_cnt;i++)
|
|
res+=JobResGet(tmpm[i]);
|
|
return res;
|
|
}
|
|
|
|
#define SAMPLE_SIZE 100
|
|
|
|
F64 Test(I64 n,I64 my_mp_cnt)
|
|
{
|
|
I64 i,val=0;
|
|
F64 start,end;
|
|
start=tS;
|
|
for (i=0;i<SAMPLE_SIZE;i++)
|
|
val+=Sum(n,my_mp_cnt);
|
|
end=tS;
|
|
"Val:%,d\n",val/SAMPLE_SIZE;
|
|
"$$RED$$N:%12,d Time:%10.8f$$FG$$\n",n,(end-start)/SAMPLE_SIZE;
|
|
return end-start;
|
|
}
|
|
|
|
#define VAL_MIN 1000
|
|
#define TEST_MIN 3
|
|
#define TEST_MAX 7
|
|
#define TESTS_NUM (TEST_MAX-TEST_MIN+1)
|
|
#define PERCENT_MAX 200
|
|
|
|
U0 MPAdd()
|
|
{
|
|
I64 i,n,
|
|
h=Fs->pix_width,
|
|
v=Fs->pix_height;
|
|
F64 t1,t2,ress[TESTS_NUM];
|
|
CDC *dc=DCAlias;
|
|
|
|
for (i=0,n=VAL_MIN;i<TESTS_NUM;i++,n*=10) {
|
|
t1=Test(n,1);
|
|
t2=Test(n,mp_cnt);
|
|
ress[i]=t2*100.0/t1;
|
|
"$$GREEN$$%8.4f%%$$FG$$\n\n",ress[i];
|
|
}
|
|
PressAKey;
|
|
|
|
DocClear;
|
|
|
|
dc->color=BLUE;
|
|
for (i=PERCENT_MAX/10;i<PERCENT_MAX;i+=PERCENT_MAX/10) {
|
|
GrPrint(dc,0,v-ToF64(i)/PERCENT_MAX*v-FONT_HEIGHT,"%3d%%",i);
|
|
GrLine(dc,0,v-ToF64(i)/PERCENT_MAX*v,h,v-ToF64(i)/PERCENT_MAX*v);
|
|
}
|
|
|
|
for (i=0;i<TESTS_NUM-1;i++) {
|
|
dc->color=RED;
|
|
dc->thick=2;
|
|
GrLine3(dc,i*h/(TESTS_NUM-1), v-ress[i ]/PERCENT_MAX*v,0,
|
|
(i+1)*h/(TESTS_NUM-1),v-ress[i+1]/PERCENT_MAX*v,0);
|
|
dc->color=GREEN;
|
|
GrPrint(dc,i*h/(TESTS_NUM-1),v-FONT_HEIGHT,"10e%d",i+TEST_MIN);
|
|
GrLine(dc,i*h/(TESTS_NUM-1),0,i*h/(TESTS_NUM-1),v);
|
|
}
|
|
PressAKey;
|
|
|
|
DCFill;
|
|
DCDel(dc);
|
|
}
|
|
|
|
MPAdd;
|