Thread View: pl.comp.lang.asm
7 messages
7 total messages
Started by "KrisB"
Sun, 08 May 2011 23:22
=?iso-8859-2?Q?Sk±d_dok³adny_zegar_w_C_pod_Win_XP/7_??
Author: "KrisB"
Date: Sun, 08 May 2011 23:22
Date: Sun, 08 May 2011 23:22
8 lines
264 bytes
264 bytes
Potrzebuj� zrobi� por�wnanie czasu wykonania algorytm�w pod Visual C++ i Win XP/7. Funkcja C time( time_t) z rozdzielczo�ci� do milisekund mi nie wystarcza-potrzebuj� rozdzielczo�ci gdzie� do mikrosekund. (mo�e by� wstawka asm) Krzy�
Re: =?ISO-8859-2?Q?Sk±d_dok³adny_zegar_w_C_pod_W?= =?ISO-8859-2?Q?in_XP/7_??
Author: Borneq
Date: Mon, 09 May 2011 00:02
Date: Mon, 09 May 2011 00:02
11 lines
314 bytes
314 bytes
W dniu 2011-05-08 23:22, KrisB pisze: > Potrzebuj� zrobi� por�wnanie czasu wykonania algorytm�w pod Visual C++ i > Win XP/7. > > Funkcja C time( time_t) z rozdzielczo�ci� do milisekund mi nie > wystarcza-potrzebuj� rozdzielczo�ci gdzie� do mikrosekund. (mo�e by� > wstawka asm) > > Krzy�
Re: =?ISO-8859-2?Q?Sk±d_dok³adny_zegar_w_C_pod_W?= =?ISO-8859-2?Q?in_XP/7_??
Author: Borneq
Date: Mon, 09 May 2011 00:09
Date: Mon, 09 May 2011 00:09
34 lines
1247 bytes
1247 bytes
W dniu 2011-05-08 23:22, KrisB pisze: > Potrzebuj� zrobi� por�wnanie czasu wykonania algorytm�w pod Visual C++ i > Win XP/7. > > Funkcja C time( time_t) z rozdzielczo�ci� do milisekund mi nie > wystarcza-potrzebuj� rozdzielczo�ci gdzie� do mikrosekund. (mo�e by� > wstawka asm) QueryPerformanceCounter chodzi z cz�stotliwo�ci� oko�o 3 MHz ale lepiej odczyta� t� cz�stotliwo�� za pomoc� QueryPerformanceFrequency. Je�li by to nie wystarczy�o mo�na u�y� wstawki assemblerowej RDTSC kt�ra mierzy pojedyncze takty CPU (!) i jej wywo�anie trwa bardzo kr�tko. Nale�y jednak pami�ta� �e na wielordzeniowych procesorach (wielu procesorach) g�upio si� zachowuje, bo ka�dy rdze� ma sw�j w�asny taktomierz, kt�re si� rozje�dzaj�. Aby wi�c zmierzy� w�tek/proces nn rekord typu 64 bitowego _asm{ dw 310Fh // rdtsc mov nn.Lo, eax mov nn.Hi, edx } proceura do mierzenia _asm { dw 310Fh // rdtsc sub eax, nn.Lo sbb edx, nn.Hi mov nn.Lo, eax mov nn.Hi, edx } nale�y ustawi� aby by� wykonywany tylko przez jeden rdze�: SetProcessAffinityMask(GetCurrentProcess(), 1); inaczej ma si� dziwne wyniki.
Re: =?ISO-8859-2?Q?Sk±d_dok³adny_zegar_w_C_pod_W?= =?ISO-8859-2?Q?in_XP/7_??
Author: Borneq
Date: Mon, 09 May 2011 00:13
Date: Mon, 09 May 2011 00:13
10 lines
287 bytes
287 bytes
W dniu 2011-05-09 00:09, Borneq pisze: > dw 310Fh // rdtsc Kod wzi�ty z programu w Pascalu, kt�ry mia� dzia�a� na bardzo starych kompilatorach, gdzie nie by�o rdtsc, w nowym C powinna by� ta instrukcja n: liczba 64 bitowa rdtsc mov nn, eax mov nn[4], edx
=?iso-8859-2?Q?Re:_Sk±d_dok³adny_zegar_w_C_pod_Win_XP/7_??
Author: "Wiktor S."
Date: Mon, 09 May 2011 07:41
Date: Mon, 09 May 2011 07:41
15 lines
502 bytes
502 bytes
> Potrzebuj� zrobi� por�wnanie czasu wykonania algorytm�w pod Visual > C++ i Win XP/7. > Funkcja C time( time_t) z rozdzielczo�ci� do milisekund mi nie > wystarcza-potrzebuj� rozdzielczo�ci gdzie� do mikrosekund. (mo�e by� > wstawka asm) �aden timer o takiej ROZDZIELCZO�CI nie zapewni ci takiej DOK�ADNO�CI. Przy mierzeniu algorytm�w mierzy si� cas tysi�ca, miliona, miliarda iteracji, aby mierzone czasy by�y rz�du sekund, a nie mikrosekund. -- Azarien
=?iso-8859-2?Q?Re:_Sk±d_dok³adny_zegar_w_C_pod_Win_XP/7_??
Author: "KrisB"
Date: Mon, 09 May 2011 09:43
Date: Mon, 09 May 2011 09:43
21 lines
1362 bytes
1362 bytes
U�ytkownik "Wiktor S." <wswiktorSP@Mpoczta.fm> napisa� w wiadomo�ci news:iq7uqe$bj5$1@news.onet.pl... >> Potrzebuj� zrobi� por�wnanie czasu wykonania algorytm�w pod Visual >> C++ i Win XP/7. >> Funkcja C time( time_t) z rozdzielczo�ci� do milisekund mi nie >> wystarcza-potrzebuj� rozdzielczo�ci gdzie� do mikrosekund. (mo�e by� >> wstawka asm) > > �aden timer o takiej ROZDZIELCZO�CI nie zapewni ci takiej DOK�ADNO�CI. > Przy mierzeniu algorytm�w mierzy si� cas tysi�ca, miliona, miliarda iteracji, aby mierzone czasy by�y rz�du sekund, a nie > mikrosekund. 1) Mam algorytm kt�ry b�dzie wykonywany dla danych rozmiaru max ~na�cie. Wykona si� to w czasie max kilku msek. 2) Co do tych "tysi�cy" pr�b: a jak "odfiltrowa�" koszty samej obs�ugi tych tysi�cy pr�b ? Wywo�anie / obs�uga p�tli / niemiarodajna zawarto�� cache tj. na og� wi�kszo�� danych przy powtarzaj�cych si� wywo�aniach ju� b�dzie w cache.. PS. Jak pod Win XP/7 uczyni� taki pomiar obiektywny ? Jak i jakie us�ugi wy��czy� ? Mog� wy��czy� firewall, antywirusa, wszystkie mo�liwe procesy w msconfig, od��cz� kom od sieci, ale to raczej ma�o. Jak zrobi� �eby win na czas pomiar�w nie robi� NIC dodatkowego a przynajmniej jak najmniej ??? (Na pewno rozumiecie)
Re: =?ISO-8859-2?Q?Sk±d_dok³adny_zegar_w_C_pod_W?= =?ISO-8859-2?Q?in_XP/7_??
Author: Borneq
Date: Mon, 09 May 2011 10:27
Date: Mon, 09 May 2011 10:27
28 lines
1298 bytes
1298 bytes
W dniu 2011-05-09 09:43, KrisB pisze: > PS. Jak pod Win XP/7 uczyni� taki pomiar obiektywny ? Jak i jakie us�ugi > wy��czy� ? Mog� wy��czy� firewall, antywirusa, wszystkie mo�liwe procesy > w msconfig, od��cz� kom od sieci, ale to raczej ma�o. Jak zrobi� �eby > win na czas pomiar�w nie robi� NIC dodatkowego a przynajmniej jak > najmniej ??? (Na pewno rozumiecie) Jak nic nie b�dzie chodzi�o to nie powinien czas si� zbytnio d�u�y�.Mo�na zwi�kszy� priorytet testowanego programu i w�tku : PriorityClass = GetPriorityClass(GetCurrentProcess); Priority = GetThreadPriority(GetCurrentThread); try { SetPriorityClass(GetCurrentProcess, REALTIME_PRIORITY_CLASS); SetThreadPriority(GetCurrentThread, THREAD_PRIORITY_TIME_CRITICAL); ...testowanie... } finally { SetThreadPriority(GetCurrentThread, Priority); SetPriorityClass(GetCurrentProcess, PriorityClass); } Pami�taj�c o przywr�ceniu w finally. Mo�na te� wykona� algorytm kilka razy i uzna� za prawdziwy ten czas, kt�ry jest najmniejszy - zwykle wi�kszo�� b�dzie podobna do najmniejszego i raz na jaki� czas b�dzie d�u�ej - zdarza si� to gdy p�tla wykonywana jest d�u�ej, gdzie mo�e si� przytrafi� ju� przerwanie zegarowe.
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads