2013-07-25 17 views
11

Jestem nowy w języku D i trzeba zmierzyć czas wykonywania algorytmu. Jakie są moje opcje? Czy jest już jakieś wbudowane rozwiązanie? Nie mogłem znaleźć niczego rozstrzygającego w sieci.Pomiar czasu wykonywania w języku D

Odpowiedz

14

Jednym ze sposobów jest użycie parametru wiersza poleceń -profile. Po uruchomieniu programu utworzy plik trace.log, w którym można znaleźć czas działania dla każdej funkcji. To oczywiście spowolni twój program, ponieważ kompilator wstawi kod liczenia czasu do każdej twojej funkcji. Ta metoda służy do ustalenia względnej prędkości działania, aby określić, które z nich należy zoptymalizować, aby poprawić szybkość aplikacji przy minimalnym wysiłku.

Drugą opcją jest użycie klasy std.datetime.StopWatch. Zobacz przykład w linku.

Lub nawet lepiej nadaje się do bezpośredniego użycia funkcji std.datetime.benchmark.

Nie zapomnij:

  1. Podczas porównywania używać tych DMD flagi kompilatora, aby osiągnąć maksymalną optymalizację -release -O -inline -noboundscheck.
  2. Nigdy nie porównuj debugowania kompilacji.
  3. Upewnij się, że nie wywołuje żadnego kodu bibliotecznego w funkcjach testowych - Będziesz porównywać wydajność implementacji biblioteki zamiast własnego kodu.

Dodatkowo można rozważyć użycie kompilatorów LDC lub GDC. Oba zapewniają lepszą optymalizację/szybkość uruchamiania aplikacji niż DMD.

+0

Profilowanie nie jest tym, czego potrzebuję w tym przypadku, ale 'std.datetime.StopWatch' jest dokładnie tym, czego szukałem. – clstaudt

3

Jeśli Twój algorytm można wywołać z wiersza poleceń, jest napisane na D przydatne narzędzie, które uruchomi twój program przez pewien czas i wydrukuje rozkład średniego czasu i wszystkich innych użytecznych liczb.

Nazywa avgtime i to jest tutaj: https://github.com/jmcabo/avgtime