-
1. Data: 2017-08-27 13:53:47
Temat: rdtsc discovery
Od: fir <p...@g...com>
ostatnio odkrylam jak tak naprawde zaskakujaco latwo jest robic testy
na rdtsc (wewnetrznym liczniku cykli w procesorach, zdaje sie obecnym od pentium 1 w
gore) z poziomu c
- jako ze ta grupa zawsze podchwytywala dosyc sensownie temat optymalizacji, postuje
przykladowy kod, jakby co to jeszcze w przyszlosci pomierzy sie pare kawalkow i
powyciaga wnisoski czy jak to nazwac
baza
void GetRdtsc(unsigned* high, unsigned* low)
{
__asm__ volatile("rdtsc" : "=a" (*low), "=d" (*high) );
return;
}
to podaje aktualny stan zliczonych cykli (podwojne wywoalnie bez niczego 'w srodku'
i policznie roznicy u mie daje 70 lub 63 cykle)
mozna opakowac to w rozmaite wraperry ja na szybko skrobnalem
void rdtsc_test(char* test_description, void (*tested_function)() )
{
unsigned high_before,
low_before,
high_after,
low_after;
GetRdtsc(&high_before, &low_before);
tested_function();
GetRdtsc(&high_after, &low_after);
long long unsigned cycles_passed =
(((long long unsigned)(high_after-high_before))<<32) +
(low_after-low_before);
printf(test_description);
printf("\n %I64u cycles passed", cycles_passed);
printf(" ( %I64u mlns )", cycles_passed/1000/1000);
}
i przykladowa 'suita' testow
double x;
void foo_sin()
{
for(int i=0; i<1000*1000; i++)
{
x = sin((double)i);
}
}
void foo_sqrt()
{
for(int i=0; i<1000*1000; i++)
{
x = sqrt((double)i);
}
}
void foo_add()
{
for(int i=0; i<1000*1000; i++)
{
x += i;
}
}
void foo_div()
{
for(int i=0; i<1000*1000; i++)
{
x /= i;
}
}
int main()
{
rdtsc_test("\n 1mln sin testing", foo_sin);
rdtsc_test("\n 1mln sqrt testing", foo_sqrt);
rdtsc_test("\n 1mln add testing", foo_add);
rdtsc_test("\n 1mln div testing", foo_div);
return 0;
}
wyniki:
1mln sin testing
95116665 cycles passed ( 95 mlns )
1mln sqrt testing
57014027 cycles passed ( 57 mlns )
1mln add testing
1001189 cycles passed ( 1 mlns )
1mln div testing
6001233 cycles passed ( 6 mlns )
HAVE FUN
-
2. Data: 2017-08-27 14:30:03
Temat: Re: rdtsc discovery
Od: fir <p...@g...com>
W dniu niedziela, 27 sierpnia 2017 13:53:48 UTC+2 użytkownik fir napisał:
>
> long long unsigned cycles_passed =
> (((long long unsigned)(high_after-high_before))<<32) +
> (low_after-low_before);
tutaj jest chyba blad, powinno byc zdaje sie
long long unsigned cycles_passed =
(((long long unsigned)(high_after-high_before))<<32) +
((long long int)low_after-low_before);
>
>
> HAVE FUN
-
3. Data: 2017-08-28 01:51:29
Temat: Re: rdtsc discovery
Od: "M.M." <m...@g...com>
On Sunday, August 27, 2017 at 1:53:48 PM UTC+2, fir wrote:
> ostatnio odkrylam jak tak naprawde zaskakujaco latwo jest robic testy
> na rdtsc (wewnetrznym liczniku cykli w procesorach, zdaje sie obecnym od pentium 1
w gore) z poziomu c
>
> - jako ze ta grupa zawsze podchwytywala dosyc sensownie temat optymalizacji,
postuje przykladowy kod, jakby co to jeszcze w przyszlosci pomierzy sie pare kawalkow
i powyciaga wnisoski czy jak to nazwac
>
> baza
>
>
> void GetRdtsc(unsigned* high, unsigned* low)
Tam jest też przykład, chyba taki sam jak Twój:
https://stackoverflow.com/questions/13772567/get-cpu
-cycle-count
Pozdrawiam
-
4. Data: 2017-08-28 01:55:02
Temat: Re: rdtsc discovery
Od: "M.M." <m...@g...com>
On Monday, August 28, 2017 at 1:51:31 AM UTC+2, M.M. wrote:
> On Sunday, August 27, 2017 at 1:53:48 PM UTC+2, fir wrote:
> > ostatnio odkrylam jak tak naprawde zaskakujaco latwo jest robic testy
> > na rdtsc (wewnetrznym liczniku cykli w procesorach, zdaje sie obecnym od pentium
1 w gore) z poziomu c
> >
> > - jako ze ta grupa zawsze podchwytywala dosyc sensownie temat optymalizacji,
postuje przykladowy kod, jakby co to jeszcze w przyszlosci pomierzy sie pare kawalkow
i powyciaga wnisoski czy jak to nazwac
> >
> > baza
> >
> >
> > void GetRdtsc(unsigned* high, unsigned* low)
>
> Tam jest też przykład, chyba taki sam jak Twój:
> https://stackoverflow.com/questions/13772567/get-cpu
-cycle-count
>
> Pozdrawiam
A tam działające na wielu platformach:
http://www.fftw.org/cycle.h
Pozdrawiam
-
5. Data: 2017-08-28 12:48:05
Temat: Re: rdtsc discovery
Od: g...@s...invalid (Adam Wysocki)
fir <p...@g...com> wrote:
> ostatnio odkrylam jak tak naprawde zaskakujaco latwo jest robic testy na
> rdtsc (wewnetrznym liczniku cykli w procesorach, zdaje sie obecnym od
> pentium 1 w gore) z poziomu c
To jeszcze odkryj istnienie out-of-order execution, schedulera i SMP.
--
[ Email: a@b a=grp b=chmurka.net ]
[ Web: http://www.chmurka.net/ ]