mirror of
https://github.com/Zeal-Operating-System/ZealOS.git
synced 2025-03-14 03:55:06 +00:00
93 lines
1.9 KiB
HolyC
Executable file
93 lines
1.9 KiB
HolyC
Executable file
I64 mp_n;
|
|
|
|
I64 MPSum(I64 my_mp_count)
|
|
{//We could use the formula n*(n+1)/2
|
|
I64 lo = mp_n * Gs->num / my_mp_count,
|
|
hi = mp_n * (Gs->num + 1) / my_mp_count,
|
|
res = 0, i;
|
|
|
|
for (i = lo; i < hi; i++)
|
|
res += i;
|
|
|
|
return res;
|
|
}
|
|
|
|
I64 Sum(I64 n, I64 my_mp_count)
|
|
{
|
|
CJob *tmpm[MP_PROCESSORS_NUM];
|
|
I64 res = 0, i;
|
|
|
|
mp_n = n + 1;
|
|
for (i = 0; i < my_mp_count; i++)
|
|
tmpm[i] = JobQueue(&MPSum, my_mp_count, i, 0);
|
|
for (i = 0; i < my_mp_count; i++)
|
|
res += JobResGet(tmpm[i]);
|
|
|
|
return res;
|
|
}
|
|
|
|
#define SAMPLE_SIZE 100
|
|
|
|
F64 Test(I64 n, I64 my_mp_count)
|
|
{
|
|
I64 i, val = 0;
|
|
F64 start, end;
|
|
|
|
start = tS;
|
|
for (i = 0; i < SAMPLE_SIZE; i++)
|
|
val += Sum(n, my_mp_count);
|
|
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_count);
|
|
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;
|