eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingrdtsc a kilka rdzeni
Ilość wypowiedzi w tym wątku: 18

  • 1. Data: 2013-04-19 11:15:24
    Temat: rdtsc a kilka rdzeni
    Od: "Borneq" <b...@a...hidden.pl>

    Od czasu procesora Pentium mamy interesująca instrukcję rdtsc, która mierzy
    czas ekstremalnie dokładnie - co do taktu i wywołanie jej zabiera bardzo
    mało czasu w porównaniu np. z QueryPerformanceCounter.
    Jednak na dwurdzeniowym procesorze uzyskiwałem bzdurne wyniki. Okazało się
    niestety, że każdy rdzeń ma własny licznik (?). Można było to obejść
    zmuszając testowy program do pracy na jednym rdzeniu
    (SetProcessAffinityMask), co jednak powoduje że taki profilowany program nie
    może działać z pełną wydajnością, gdy ma kilka wątków.
    Pytanie: czy takie zachowanie rdtsc zależy także od syetemu? bo zdaje się że
    w Windows 8 a nawet w XP obecnie, po poprawkach już licznik rdtsc działał
    dobrze nawet na kilku rdzeniach, ale nie jestem tego pewien.


  • 2. Data: 2013-04-19 22:04:24
    Temat: Re: rdtsc a kilka rdzeni
    Od: "M.M." <m...@g...com>

    On Friday, April 19, 2013 11:15:24 AM UTC+2, Borneq wrote:
    > Od czasu procesora Pentium mamy interesująca instrukcję rdtsc, która mierzy
    > czas ekstremalnie dokładnie - co do taktu i wywołanie jej zabiera bardzo
    > mało czasu w porównaniu np. z QueryPerformanceCounter.
    > Jednak na dwurdzeniowym procesorze uzyskiwałem bzdurne wyniki. Okazało się
    > niestety, że każdy rdzeń ma własny licznik (?). Można było to obejść
    > zmuszając testowy program do pracy na jednym rdzeniu
    > (SetProcessAffinityMask), co jednak powoduje że taki profilowany program nie
    > może działać z pełną wydajnością, gdy ma kilka wątków.
    > Pytanie: czy takie zachowanie rdtsc zależy także od syetemu? bo zdaje się że
    > w Windows 8 a nawet w XP obecnie, po poprawkach już licznik rdtsc działał
    > dobrze nawet na kilku rdzeniach, ale nie jestem tego pewien.

    A jakby przypisać proces na chama do rdzenia?
    Pozdrawiam


  • 3. Data: 2013-04-19 22:16:48
    Temat: Re: rdtsc a kilka rdzeni
    Od: "Borneq" <b...@a...hidden.pl>

    Użytkownik "M.M." <m...@g...com> napisał w wiadomości
    news:4e868d51-743d-4a33-af8c-2da729bf9d6a@googlegrou
    ps.com...
    On Friday, April 19, 2013 11:15:24 AM UTC+2, Borneq wrote:
    > Od czasu procesora Pentium mamy interesująca instrukcję rdtsc, która
    > mierzy
    > czas ekstremalnie dokładnie - co do taktu i wywołanie jej zabiera bardzo
    > mało czasu w porównaniu np. z QueryPerformanceCounter.
    > Jednak na dwurdzeniowym procesorze uzyskiwałem bzdurne wyniki. Okazało się
    > niestety, że każdy rdzeń ma własny licznik (?). Można było to obejść
    > zmuszając testowy program do pracy na jednym rdzeniu
    > (SetProcessAffinityMask), co jednak powoduje że taki profilowany program
    > nie
    > może działać z pełną wydajnością, gdy ma kilka wątków.
    > Pytanie: czy takie zachowanie rdtsc zależy także od syetemu? bo zdaje się
    > że
    > w Windows 8 a nawet w XP obecnie, po poprawkach już licznik rdtsc działał
    > dobrze nawet na kilku rdzeniach, ale nie jestem tego pewien.

    > A jakby przypisać proces na chama do rdzenia?

    Właśnie to robię przez SetProcessAffinityMask,ale wtedy wszystkie wątki tego
    procesu działają na jednym rdzeniu, co nie pozwala na pełną prędkość.
    Nie wiem jak mają się do tego sprawy systemu, bo zdaje się, że ostatnio gdy
    testowałem (obecnie nie mam na czym, piszę z jednordzeniowego laptopa) to
    nawet na dwóch rdzeniach się dobrxze zachowywał, choć to mogło być sprawą
    przypadku.
    Chodzi o to, że nawet gdy mamy jednowątkowy proces, a choćby kilkuwątkowy,
    to dwa odczyty rdtsc przeważnie są blisko siebie i w jednym wątku. I teraz,
    czy system operacyjny będzie cały czas jedne wątek przydzielał do jedneog
    rdzenia/procesora? Może poprzednio nie przydzielał a teraz przydziela, nie
    jestem tego pewien.
    ALE
    Pomyślałem teraz, że nie potrzebnie używałem SetProcessAffinityMask, można
    przecież użyć
    SetThreadAffinityMask dla wątku badanego a inne wątki będą może na innych
    rdzeniach i wtedy można profilować program wielowątkowy bez ograniczania się
    do jednego rdzenia - jeden wątek i tak jest ograniczony do jednego.


  • 4. Data: 2013-04-19 22:39:02
    Temat: Re: rdtsc a kilka rdzeni
    Od: "M.M." <m...@g...com>

    On Friday, April 19, 2013 10:16:48 PM UTC+2, Borneq wrote:
    > SetThreadAffinityMask dla wątku badanego a inne wątki
    Yyyy ale po co wiele wątków jeśli mierzysz czas z dokładnością do jednego taktu?
    Tak mierzy się bardzo krótki fragment kodu, który wykonuje się max 1000 taktów.
    Wątki można mierzyć "normalnie".
    Pozdrawiam


  • 5. Data: 2013-04-20 00:33:35
    Temat: Re: rdtsc a kilka rdzeni
    Od: "Borneq" <b...@a...hidden.pl>

    Użytkownik "M.M." <m...@g...com> napisał w wiadomości
    news:774acdc1-efe4-4db4-9270-81d4d4cacc34@googlegrou
    ps.com...
    > Yyyy ale po co wiele wątków jeśli mierzysz czas z dokładnością do jednego
    > taktu?
    > Tak mierzy się bardzo krótki fragment kodu, który wykonuje się max 1000
    > taktów.
    > Wątki można mierzyć "normalnie".

    Gdy program ma kilka wątków a my chcemy zmierzyć coś w jednej funkcji w
    jednym wątku.
    Pozdrawiam


  • 6. Data: 2013-04-20 07:28:59
    Temat: Re: rdtsc a kilka rdzeni
    Od: "M.M." <m...@g...com>

    On Saturday, April 20, 2013 12:33:35 AM UTC+2, Borneq wrote:
    > Gdy program ma kilka wątków a my chcemy zmierzyć coś w jednej funkcji w
    > jednym wątku.
    Ja bym wyjął optymalizowany fragment do innego programu i uruchamiał
    zdecydowanie jako jednowątkowy.
    Pozdrawiam


  • 7. Data: 2013-04-20 10:35:21
    Temat: Re: rdtsc a kilka rdzeni
    Od: "Borneq" <b...@a...hidden.pl>

    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


  • 8. Data: 2013-04-20 13:04:43
    Temat: Re: rdtsc a kilka rdzeni
    Od: Michoo <m...@v...pl>

    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.

    --
    Pozdrawiam
    Michoo


  • 9. Data: 2013-04-20 13:23:43
    Temat: Re: rdtsc a kilka rdzeni
    Od: "M.M." <m...@g...com>

    On Saturday, April 20, 2013 1:04:43 PM UTC+2, Michoo wrote:
    > 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.
    To wszystko racja, a dodatkowo dochodzą problemy z przełączaniem czasu
    procesora dla innych procesów... Naprawdę nie widzę innego sensownego
    zastosowania rdtsc niż pomiar króciutkich fragmentów kodu.
    Pozdrawiam


  • 10. Data: 2013-04-20 23:04:29
    Temat: Re: rdtsc a kilka rdzeni
    Od: Bronek Kozicki <b...@s...net>

    On 19/04/2013 21:16, Borneq wrote:
    > Pomyślałem teraz, że nie potrzebnie używałem SetProcessAffinityMask,
    > można przecież użyć
    > SetThreadAffinityMask dla wątku badanego a inne wątki będą może na
    > innych rdzeniach i wtedy można profilować program wielowątkowy bez
    > ograniczania się do jednego rdzenia - jeden wątek i tak jest ograniczony
    > do jednego.

    dobrze myślisz. Ponadto, jeżeli serwer jest dedykowany do jednego
    procesu, to możesz sobie pozwolić na SetThreadAffinityMask na każdym wątku

    B.

strony : [ 1 ] . 2


Szukaj w grupach

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: