-
11. Data: 2013-04-21 11:08:03
Temat: Re: rdtsc a kilka rdzeni
Od: "M.M." <m...@g...com>
On Saturday, April 20, 2013 11:04:29 PM UTC+2, Bronek Kozicki wrote:
> dobrze myślisz. Ponadto, jeżeli serwer jest dedykowany do jednego
> procesu, to możesz sobie pozwolić na SetThreadAffinityMask na każdym wątku
Nie wiem, ale wydaje się, że to jest bez sensu. Co jeśli system odbierze
sterowanie i inny proces nabije licznik taktów?
Pozdrawiam
-
12. Data: 2013-04-21 12:02:08
Temat: Re: rdtsc a kilka rdzeni
Od: "Borneq" <b...@a...hidden.pl>
Użytkownik "M.M." <m...@g...com> napisał w wiadomości
news:2bdc9de6-4aa7-4b4c-8c45-a2dd52871ca5@googlegrou
ps.com...
> Nie wiem, ale wydaje się, że to jest bez sensu. Co jeśli system odbierze
> sterowanie i inny proces nabije licznik taktów?
Cicho zakładam, że chodził będzie przede wszystkim proces profilowany a inne
będą w tle raczej nieaktywne.
Ale musimy rozróżnic dwa źródła problemów:
Jeden dotyczy tylko rdtsc - osobne liczniki na każdym rdzeniu, to załatwia
SetThreadAffinityMask na każdym wątku; daje się ustawić ręcznie, jednak czy
instnieje algorytm dodawania w miejsca kodu SetThreadAffinityMask dla
każdego wątku przez profiler, czy też jest to problem nieobliczalny?
--------------------------
Drugi, zupełnie inny - to wieloprocesowość i wielowątkowość - chcemy
zmierzyć daną funkcję, mierzymy czas na początku i końcu ale nam się włącza
inny wątek.
To występuje nie tylko przy rdtsc ale również przy QueryPerformanceCounter,
zdaje się że tylko GetTickCount jest od tego wolna, ale gdy chodzi o jej
dokładność - pokazuje wynik w milisekundach, ale tak naprawdę mierzy w 1/64
sekundowych tickach, przy których przełączane są wątki i procesy, więc
dokładność żadna.
-
13. Data: 2013-04-21 12:50:51
Temat: Re: rdtsc a kilka rdzeni
Od: "M.M." <m...@g...com>
On Sunday, April 21, 2013 12:02:08 PM UTC+2, Borneq wrote:
> Użytkownik "M.M." napisał w wiadomości
>
> news:2bdc9de6-4aa7-4b4c-8c45-a2dd52871ca5@googlegrou
ps.com...
>
> > Nie wiem, ale wydaje się, że to jest bez sensu. Co jeśli system odbierze
>
> > sterowanie i inny proces nabije licznik taktów?
>
>
>
> Cicho zakładam, że chodził będzie przede wszystkim proces profilowany a inne
> będą w tle raczej nieaktywne.
Przy takim założeniu wystarczy mniej dokładny pomiar.
[...]
> To występuje nie tylko przy rdtsc ale również przy QueryPerformanceCounter,
> zdaje się że tylko GetTickCount jest od tego wolna, ale gdy chodzi o jej
> dokładność - pokazuje wynik w milisekundach, ale tak naprawdę mierzy w 1/64
> sekundowych tickach, przy których przełączane są wątki i procesy, więc
> dokładność żadna.
Wystarczy taka dokładność w zupełności.
Małe fragmenty kodu można mierzyć licznikiem taktów. Duże mierzymy zwykłym
timerem jaki oferuje dany OS.
Naprawdę dokładnego pomiaru i tak i tak nie uzyskamy, to nie te czasy,
gdy każda instrukcja miała stałą ilość taktów. Wystarczy że inny proces
zmieni zawartość cache i już pomiar będzie inny, nawet gdy system nie
odbierze sterowania.
Pozdrawiam
-
14. Data: 2013-04-21 12:52:30
Temat: Re: rdtsc a kilka rdzeni
Od: firr kenobi <p...@g...com>
nie rozumiem problemu
obawiasz sie ze jak masz cos takiego
m()
{
//rtdsc
f();
//rtdsc
}
to zczniesz na jednym a skonczysz na innym
rdzeniu bo system przerzuci proces na drugi
rdzen???
-
15. Data: 2013-04-21 13:44:36
Temat: Re: rdtsc a kilka rdzeni
Od: "R.e.m.e.K" <g...@d...null>
Dnia Sun, 21 Apr 2013 03:52:30 -0700 (PDT), firr kenobi napisał(a):
> nie rozumiem problemu
standard
> obawiasz sie ze jak masz cos takiego
>
> m()
> {
> //rtdsc
>
> f();
>
> //rtdsc
>
>
> }
>
> to zczniesz na jednym a skonczysz na innym
> rdzeniu bo system przerzuci proces na drugi
> rdzen???
A co w tym dziwnego???
I nie proces a watek. Wiesz, istnieje cos takiego jak watek. Ba, istnieje
jeszcze cos nizszego poziomu niz watek, ale nie bede Ci macil, bo to za duzo
nowosci naraz jak na twoja biedna glowe.
--
pozdro
R.e.m.e.K
-
16. Data: 2013-04-21 15:09:48
Temat: Re: rdtsc a kilka rdzeni
Od: Bronek Kozicki <b...@s...net>
On 21/04/2013 11:02, Borneq wrote:
> Użytkownik "M.M." <m...@g...com> napisał w wiadomości
> news:2bdc9de6-4aa7-4b4c-8c45-a2dd52871ca5@googlegrou
ps.com...
>> Nie wiem, ale wydaje się, że to jest bez sensu. Co jeśli system odbierze
>> sterowanie i inny proces nabije licznik taktów?
>
> Cicho zakładam, że chodził będzie przede wszystkim proces profilowany a
> inne będą w tle raczej nieaktywne.
> Ale musimy rozróżnic dwa źródła problemów:
> Jeden dotyczy tylko rdtsc - osobne liczniki na każdym rdzeniu, to
> załatwia SetThreadAffinityMask na każdym wątku; daje się ustawić
> ręcznie, jednak czy instnieje algorytm dodawania w miejsca kodu
> SetThreadAffinityMask dla każdego wątku przez profiler, czy też jest to
> problem nieobliczalny?
> --------------------------
> Drugi, zupełnie inny - to wieloprocesowość i wielowątkowość - chcemy
> zmierzyć daną funkcję, mierzymy czas na początku i końcu ale nam się
> włącza inny wątek.
> To występuje nie tylko przy rdtsc ale również przy
> QueryPerformanceCounter, zdaje się że tylko GetTickCount jest od tego
QueryPerformanceCounter wykonuje context switch, więc do mierzenia czasu
z dokładności poniżej 1 mikorsecondy się nie nadaje.
B.
-
17. Data: 2013-04-21 15:14:49
Temat: Re: rdtsc a kilka rdzeni
Od: Bronek Kozicki <b...@s...net>
On 21/04/2013 11:02, Borneq wrote:
> Użytkownik "M.M." <m...@g...com> napisał w wiadomości
> news:2bdc9de6-4aa7-4b4c-8c45-a2dd52871ca5@googlegrou
ps.com...
>> Nie wiem, ale wydaje się, że to jest bez sensu. Co jeśli system odbierze
>> sterowanie i inny proces nabije licznik taktów?
>
> Cicho zakładam, że chodził będzie przede wszystkim proces profilowany a
> inne będą w tle raczej nieaktywne.
> Ale musimy rozróżnic dwa źródła problemów:
> Jeden dotyczy tylko rdtsc - osobne liczniki na każdym rdzeniu, to
> załatwia SetThreadAffinityMask na każdym wątku; daje się ustawić
> ręcznie, jednak czy instnieje algorytm dodawania w miejsca kodu
> SetThreadAffinityMask dla każdego wątku przez profiler, czy też jest to
> problem nieobliczalny?
wspominając serwer, miałem na myśli że w przypadku aplikacji
produkcyjnej, która ma dla siebie dedykowany serwer, kod produkcyjny
(nie tylko profilowany) może sobie alokować na stałe CPU, tj. możesz dla
poszczególnych wątków ustawić affinity w aplikacji która będzie działać
w produkcji, a nie tylko na profilerze. To dobrze działa jeżeli masz
pulę wątków roboczych dostosowaną do liczby dostępnych CPU (najlepiej
jest zawsze zostawiać CPU0 dla systemu), ale nie za bardzo jeżeli
tworzysz wątki dynamicznie.
B.
-
18. Data: 2013-04-21 17:23:40
Temat: Re: rdtsc a kilka rdzeni
Od: Edek <e...@g...com>
Dnia Sat, 20 Apr 2013 13:04:43 +0200 po głębokim namyśle Michoo rzekł:
> On 20.04.2013 10:35, Borneq wrote:
>> Użytkownik "M.M." <m...@g...com> napisał w wiadomości
>> news:3ae04ea4-5412-4424-894d-8772dd5d8873@googlegrou
ps.com...
>>> Ja bym wyjął optymalizowany fragment do innego programu i uruchamiał
>>> zdecydowanie jako jednowątkowy.
>>
>> Weźmy przypadek dokładnego profilera, który może nie tylko mierzyć czas
>> funkcji ale i wewnątrz funkcji. Wtedy kompilujemy program z
>> informacjami dla profilera, który dodaje rdtsc w odpowiednich miejscach
>
> Jeżeli w trakcie wykonania był zmieniony rdzeń to wyniki rdtsc są
> niewiele mówiące. Zapisanie stanu procesu to kilkaset cykli, odczytanie
> również. Jak jeszcze proces trafił na niespokrewniony rdzeń to cache mu
> się rozleciało... Ten pomiar jest po prostu do powtórki.
Nie dałoby się użyć cgroups/cpu? Mając algorytm bez io dałoby się
profilować nawet wielowątkowy kod. Chociaż nie jestem pewien czy
to będzie działać.
--
Edek