mirror of https://github.com/minexew/Shrine.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
72 lines
1.8 KiB
72 lines
1.8 KiB
#help_index "Info;Time/CPU Cycles;Processor" |
|
class CCPURep |
|
{ |
|
Bool mp_start,mp_end; |
|
I64 mp_not_done_flags, |
|
**swaps, |
|
**cycles; |
|
}; |
|
|
|
U0 MPCPURep(CCPURep *cr) |
|
{ |
|
I64 swaps=0,cycles_0,cycles_f; |
|
while (!cr->mp_start) |
|
Yield; |
|
cycles_0=GetTSC; |
|
while (!cr->mp_end) { |
|
swaps++; |
|
Yield; |
|
} |
|
cycles_f=GetTSC; |
|
cr->swaps[Gs->num]=swaps; |
|
cr->cycles[Gs->num]=cycles_f-cycles_0; |
|
LBtr(&cr->mp_not_done_flags,Gs->num); |
|
} |
|
|
|
public U0 CPURep(Bool full=FALSE) |
|
{//Report number of cores and clock freq. |
|
I64 i,total_swaps,total_cycles; |
|
F64 t0,tf; |
|
CCPURep cr; |
|
|
|
if (!full) |
|
"%03X Cores %6h?nHz\n",mp_cnt,ToF64(cnts.time_stamp_freq); |
|
else { |
|
cr.swaps=CAlloc(sizeof(I64)*mp_cnt); |
|
cr.cycles=CAlloc(sizeof(I64)*mp_cnt); |
|
cr.mp_start=cr.mp_end=FALSE; |
|
cr.mp_not_done_flags=1<<mp_cnt-1; |
|
for (i=0;i<mp_cnt;i++) |
|
Spawn(&MPCPURep,&cr,NULL,i); |
|
|
|
t0=tS; |
|
cr.mp_start=TRUE; |
|
Sleep(2000); |
|
cr.mp_end=TRUE; |
|
while (cr.mp_not_done_flags) |
|
Yield; |
|
tf=tS; |
|
|
|
"\n%03X Cores %6h?nHz\n",mp_cnt,ToF64(cnts.time_stamp_freq); |
|
"\n Context\n" |
|
"CPU Swaps/s Cycles\n" |
|
"--- ------------- -----------------\n"; |
|
total_swaps=0; |
|
total_cycles=0; |
|
for (i=0;i<mp_cnt;i++) { |
|
" %02X %13,d %17,d\n",i, |
|
ToI64(cr.swaps[i]/(tf-t0)),ToI64(cr.cycles[i]/(tf-t0)); |
|
total_swaps+=cr.swaps[i]; |
|
total_cycles+=cr.cycles[i]; |
|
} |
|
"--- ------------- -----------------\n"; |
|
"%03X %13,d %17,d\n",i, |
|
ToI64(total_swaps/(tf-t0)),ToI64(total_cycles/(tf-t0)); |
|
"Avg %13,d %17,d\n\n", |
|
ToI64(total_swaps/(tf-t0)/i),ToI64(total_cycles/(tf-t0)/i); |
|
"Avg Cycles/Swap: %12.6f\n",ToF64(total_cycles)/total_swaps; |
|
"Avg Time/Swap : %12.6fns\n\n",(tf-t0)*1000000000.0*i/total_swaps; |
|
Free(cr.swaps); |
|
Free(cr.cycles); |
|
} |
|
}
|
|
|