Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Szybkie pytanie o wydajność c++ vs php
Forum PHP.pl > Forum > PHP
mysz0n
Witam, ciekawi mnie jedna sprawa, napisałem aplikacje w c++ liczącą liczby pierwsze, elementy ciągu Fibonacciego i liczące silnie z zadanej liczby, napisałem tez takie same programy w PHP.
Skrypty prócz wyniku pokazują też czas potrzebny na obliczanie. Odpalając to na jednej maszynie (wiadomo, aplikacje c++ z pliku exe, a php z localhosta) okazuje się ze skrypty w PHP są co najmniej 10 razy szybsze jak skrypty w c++ - czy to jest możliwe? Wiadomo że mówimy o czasach rzędu 0,00046459ms, ale czy taka opcja jest fizycznie możliwa? da się to jakoś logicznie wytłumaczyć ? skrypty odpalam na xampp-ie czasy badam funkcja microtime();
l0ud
W jaki sposób mierzysz czas w programie w c++? (GetTickCount() nie jest wystarczająco precyzyjne)

Nie, nie jest to możliwe tongue.gif
Zyx
A jeszcze jak przy pomiarze czasu wliczysz instrukcje wejścia/wyjścia, nie pamiętając że iostream do demonów szybkości nie należy, to masz swoją odpowiedź. W praktyce nie ma szans, aby język interpretowany prześcignął język kompilowany do kodu maszynowego na tym samym, napisanym tak samo algorytmie. Różnice w czasie to co najwyżej błędy pomiaru i użycie jakichś powolnych bibliotek dodatkowych.
mysz0n
w c++ obliczam za pomocą GetTickCount(), start i stop obliczania czasu jest przypisany tylko do obliczania funkcji, nie wliczam w to includa iostream, tak samo jak nie wliczam w php nic innego prócz konkretnego obliczania funkcji, wchodzi do funkcji - odpala licznik, liczy wyrzuca wynik wyrzuca czas. Tylko teraz mam problem - wyszło mi tak jak pisze, w różnych obliczeniach różnie ale ZAWSZE php był co najmniej tak samo szybki lub nieco szybszy od C++, sprawozdanie do oddania na sobotęsmile.gif i teraz co zrobić, napisać to co mi wyszło z zaznaczeniem ze jest opcja na błąd - czy profilaktycznie przemnożyć trochę wyniki php tak żeby wyszły na gorsze od c++ i pod takie coś pisać sprawozdanie?snitch.gif

oj sorry, czas sprawdzam za pomocą funkcji QueryPerformanceFrequency() bo GetTickCount() okazała się za mało dokładna.
l0ud
iosteam się nie includuje przy uruchamianiu programu. Jego 'dołączenie' odbywa się w czasie kompilacji.

Rady:
- nie wyrzucaj żadnych wyników do wyjścia, a już na pewno nie używaj strumieni. Co za problem obliczyć coś nie podając wyniku? W obu przypadkach skrócisz czas wykonywania.
- zwiększ zakres liczb. Im więcej do liczenia tym dokładniejsze wyniki i widoczniejsza przewaga C++. Możesz też pokazać tutaj swoje programy, może po prostu coś spaprałeś? tongue.gif
Crozin
Albo skopałeś program, albo jakieś cuda wyrobiłeś w skrypcie, albo źle mierzysz czas bo generalnie to co opisujesz jest niemożliwe. PHP musi zostać zinterpretowany zanim zostanie cokolwiek wykonane itp. co już samo w sobie trochę trwa. Nie masz też takiej kontroli nad jego pracą jak w przypadku C++ - czyli wykonywane są jakieś drobne, zbędne operacje mające jednak wpływ na czas wykonywania.

Może najlepiej będzie jak pokażesz kody źródłowe?
MitS
Zdecydowanie nie prawda ze PHP jest szybsze tongue.gif
Kiedyś pamiętam miałem do napisania jakiś skrypt sorujący. No i aby było łatwiej napisałem sobie go w PHP - wykonywał mi się około 5-7 minut, później postanowiłęm w C napisać dokładnie ten sam skrypt. Okazało się że w C skrypt wykonał się po 30 może 40 sekundach.

To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.