Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Realny czas wykonywania skryptu
pohlaniacz
post
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 31.12.2011

Ostrzeżenie: (0%)
-----


Witam, potrzebuje zmierzyc czas wykonywania komend exec/system, ale w sposob, zeby np. mierzac 3 czasy, byly by one jak najbardziej dokladne. W jakis sposob mozna dac najwyzszy priorytet dla danego kodu? Opcja z microtime wydaje sie byc za bardzo rozbiezna, czy jest bardziej optymalne wyjscie? Serwer stoi na apache'u
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
Fifi209
post
Post #2





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

Ostrzeżenie: (0%)
-----


Skoro chcesz taki dokładny czas to nie mierz z poziomu php ;] użyj c, c++ czy c#
Go to the top of the page
+Quote Post
abort
post
Post #3





Grupa: Zarejestrowani
Postów: 590
Pomógł: 107
Dołączył: 25.10.2011

Ostrzeżenie: (0%)
-----


Generalnie do zwiększenia priorytetu procesu stosuje się polecenie "nice". Szczegóły w manualu.
Możesz też pobawić się (z linii komend linuksa) instrukcją "time", która podaje trzy czasy:
Kod
[user@host ~] $ time ls -la > /dev/null

real    0m0.038s
user    0m0.004s
sys     0m0.008s

Jaki czas czemu odpowiada - też odsyłam do manuala.
Moim zdaniem, jeśli chcesz testować szybkość swojego kodu (np. do celów benchmarków), wykonaj ten kod w pętli N razy i wybierz najmniejszą wartość (najszybciej wykonany kod). Jeśli chcesz oszacować przeciętny czas wykonania się kodu, wybierz średnią (lub medianę) z N pomiarów.

I pamiętaj, że Linux to system wielozadaniowy (to zapewne wiesz), i przyjmij do wiadomości, że nie jesteś (i nie będziesz) w stanie wykonać swojego procesu z takim priorytetem, by inne procesy nie uszczknęły czegoś z mocy procesora. A to, jak się domyślasz, zafałszuje te wyniki, które chcesz uzyskać.

Przy okazji: nie wiem, do jakich rzeczy potrzebujesz takich danych - jeśli napiszesz coś więcej, postaram się coś doradzić.
Go to the top of the page
+Quote Post
pohlaniacz
post
Post #4





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 31.12.2011

Ostrzeżenie: (0%)
-----


dzieki za odpowiedz (IMG:style_emoticons/default/smile.gif)

Serwer bedzie na windowsie, wiec opcja z nice odpada. Potrzebuje to do nastepujacej rzeczy, uzytkownik wysyla kod swojego programu w cpp (obslugujacy wej/wyj), skrypt go kompiluje i wykonuje ( z wej i wyj) i potrzebny mi jest czas, w jakim sie on wykonal.

Jedyne co mi narazie przychodzi do glowy to napisanie skryptu dodajacego do programu cpp kod
Kod
#include <time.h>
...

int main (){
clock_t tStart = clock();
...
printf("Time taken: %.2fs\n", (double)(clock() - tStart)/CLOCKS_PER_SEC);
}

i wtedy w pliku txt wyjsciowym ostatnia linijka byloby wykonanie programu, nie wiem czy to troche nie na okolo, ale w tym przypadku moze bylyby dokladniejsze wyniki?
Go to the top of the page
+Quote Post
Uriziel01
post
Post #5





Grupa: Zarejestrowani
Postów: 307
Pomógł: 37
Dołączył: 9.11.2010
Skąd: Zielona Góra

Ostrzeżenie: (0%)
-----


Ale ty chcesz mierzyć czas samego wykonania czy łącznie z linkowaniem i kompilacją ? Jeżeli czas samego wykonania to co stoi na przeszkodzie porównanie czasu odpalania procesu do czasu zwrócenia return'a przez ten 'kod cpp' ? Co prawda dokładność nie jest powalająca bo nie wiesz ile czasu minęło od chwili w której odpaliłeś dany proces do momentu ew którym jego kod zacznie się wykonywać. Ale bez ingerencji w wewnętrzny kod tych programów.

EDIT:
Może niezbyt jasno się wyraziłem, innymi słowy. Dlaczego potrzebujesz aż takiej dokładności tych pomiarów ? Co zmieni te kilkadziesiąt ms różnicy.

Ten post edytował Uriziel01 3.01.2012, 12:56:57
Go to the top of the page
+Quote Post
pohlaniacz
post
Post #6





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 31.12.2011

Ostrzeżenie: (0%)
-----


Czas samego wykonania.

Siedzialem nad tym troche probujac ingerowac w kod - bez sensu wyjscie. Po testach przykladowego programu, w php z obsluga microtime wychodzi ~0,055sec, z kodem ktory wkleilem powyzej w cpp wychodzi 0,02s, nie wiem jak bedzie z "grubszymi" programi, no ale trudno.
Go to the top of the page
+Quote Post
Uriziel01
post
Post #7





Grupa: Zarejestrowani
Postów: 307
Pomógł: 37
Dołączył: 9.11.2010
Skąd: Zielona Góra

Ostrzeżenie: (0%)
-----


Najprościej będzie jeżeli napiszesz mały program w C+'a z poziomu którego będziesz odpalał skompilowany projekt. Zaczniesz liczyć czas dopiero gdy system zwróci ci poprawny PID zamiast już od momentu wydania polecenia uruchomienia procesu. Odbierzesz jego odpowiedź i zatrzymasz timer. Powinno dać dużo lepszy wynik niż PHP.
Go to the top of the page
+Quote Post
abort
post
Post #8





Grupa: Zarejestrowani
Postów: 590
Pomógł: 107
Dołączył: 25.10.2011

Ostrzeżenie: (0%)
-----


Z jednej strony masz 55ms zmierzone za pomocą microtime w php. Z drugiej strony masz 20us przy pomiarze w C. Niby jest to "tylko" 35us. Ale z drugiej strony jest to aż 175% różnicy - a taka różnica to nie w kij dmuchał.

Powiem tak: nie lubię ciągnąć za język, bo rozumiem, że nie każdy lubi dzielić się tym, co robi (i po co). Ale niezmiennie nurtuje mnie pytanie "PO CO"? Bo jeśli jest to np. jakiś konkurs informatyczny na najszybszy algorytm wykonania "czegoś-tam", to rozwiązanie wydaje mi się proste: wykonać program N razy w pętli: znaczy się, wszystko ma być robione w C, PHP będzie tylko "uploaderem" i swego rodzaju frontendem do kompilatora - np. gwarantując stałe parametry wywołania kompilatora (a bywa, że na tym można naprawdę dużo zyskać). Inne pomysły nie przychodzą mi na myśl, co nie znaczy, że nie istnieją (IMG:style_emoticons/default/smile.gif)






Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 2.10.2025 - 19:02