eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingSkąd dokładny zegar w C pod Win XP/7 ?Re: Skąd dokładny zegar w C pod Win XP/7 ?
  • Data: 2011-05-09 19:18:06
    Temat: Re: Skąd dokładny zegar w C pod Win XP/7 ?
    Od: Zbigniew Malec <a...@i...invalid> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    On Mon, 9 May 2011 09:43:43 +0200, KrisB wrote:

    > 1) Mam algorytm który będzie wykonywany dla danych rozmiaru max ~naście. Wykona się
    to w czasie max kilku msek.

    A to w takim razie do czego ci jest ta wiedza o sprawności algorytmu
    potrzebna? Jeżeli to zawsze będą małe dane, to niezależnie od algorytmu*
    czas wykonania będzie krótki. Ulepszanie algorytmów ma sens jedynie* w
    przypadku, kiedy spodziewamy się dużej ilości danych, albo sama czynność
    jest wykonywana bardzo często.
    Jeżeli nie masz dobrych podstaw (problemu z wydajnością), to lepiej się za
    takie optymalizacje nie brać i zobaczyć jak to się będzie faktycznie
    zachowywało w realnej sytuacji i dopiero jak mamy pewność, że poprawa
    algorytmu ma sens to się do niej bierzemy. Tutaj przydaje się profiler.

    * w granicach rozsądku i z pominięciem sytuacji ekstremalnych oraz
    bibliotek (program ma być tak szybki, jak tego oczekuje jego użytkownik,
    ale biblioteka musi być tak szybka, jak oczekuje tego jej najbardziej
    niecierpliwy użytkownik ;) ).

    > 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 ?

    To jest oczywiście dobre i ważne pytanie. Znowu zależy jaka dokładność
    ciebie interesuje i co tak na prawdę chcesz mierzyć.

    Narzut na pętlę nie będzie duży, natomiast ma tę zaletę, że koszt jego
    (narzutu) jest przewidywalny. Jeżeli chcesz porównać dwa algorytmy, to taki
    dodatkowy koszt prawdopodobnie nie będzie przeszkodą w interpretacji
    wyników.
    Jeżeli martwi ciebie zawartość cache, to znowu trzeba siebie zapytać, co
    się tak na prawdę mierzy. Jeżeli chodzi o samą wydajność algorytmu, to czas
    dostępu do pamięci nie powinien mieć znaczenia, bo nie wynika on z samej
    konstrukcji algorytmu.
    Jeżeli ten cache ci jednak przeszkadza, to oczywiście też da się to
    rozwiązać, znowu zależy to od konkretnego zagadnienia.
    Możesz posługiwać się np. danymi większymi niż cache i w ten sposób
    zapewnić sobie, że cache właściwie nie będzie używany, możesz też np.
    losować dane a potem odjąć od ogólnego wyniku czas wykonania takiej samej
    ilości samych losowań (wtedy powinieneś dostać dość dobre przybliżenie
    samego algorytmu).
    W takich przypadkach oczywiście zawsze trzeba też uważać, żeby nam
    kompilator nie wyoptymalizował z kodu kawałków, które chcemy mierzyć ;)

    > 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)

    Raczej się nie da, natomiast wykonując odpowiednio dużą ilość powtórzeń
    wyeliminujesz w znacznej mierze znaczną ilość takich problemów.

    Ps. tak jak napisał Paweł, zamiast ustalać ilość powtórzeń, lepiej ustalić
    całkowity czas testu.

    --
    Pozdrawiam
    Zbyszek Malec

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

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: