Wpis z mikrobloga

@BloodDeath94: @kyaroru: Jako człowiek piszący w Javie (podobny schemat co C#) napiszę, że to prawda - w Javie JIT robi takie optymalizacje, że kod może być szybszy niż w C++, po prostu jest dostosowywany pod konkretne użycie. Natomiast kompilacje są o ile dobrze pamiętam dwóch typów, C1 i C2, oba typy wymagają pewnej liczby uruchomień do uruchomienia się i komplikacji kodu :)
w Javie JIT robi takie optymalizacje, że kod może być szybszy niż w C++

@Tomek7: Dobry kod w Javie JIT może być lepszy, od złego kodu w C++ *
Gdy zwracasz uwagę na prefetchery, zarządzanie cache i inne #!$%@? muje (które jednak wymagają wiedzy), czasy nawet nie będą zbliżone. No ale coś, za coś.
@mihaubiauek: Nie. Od dobrego kodu w C++ też może być szybszy. Chyba nie zdajesz sobie sprawy ile JIT może usprawić. On potrafi zinline'ować całe funkcje, przestawić instrukcje, zrobić spłaszczenie pętli i wiele, wiele innych. Kod w C++ może być zoptymalizowany tylko raz, JIT dostosuje się do Twojego konkretnego urządzenia. Ale to wymaga wielu powtórzeń, dlatego uruchomienie kodu Javy raz nic nie da - będzie wolniejsza. Od ok 2000 powtórzeń zaczynają się
@BloodDeath94: Podstawowa sprawa tycząca się każdego pomiaru czasu. Załóżmy, że mierzysz czas trwania jakiegoś procesu t z niepewnością dt (wynikającą np. z dokładności zegara czy tego że system jest wielowątkowy i czasem sobie kontekst przełączy bo inne rzeczy też się w tle dzieją), to mierząc zdarzenie N razy i licząc średnią zmniejszysz niepewność do dt/N. Dlatego jeśli chcesz uzyskać czas wykonania jakiejś tam krótkiej operacji z sensowną niepewnością to robisz program
@BloodDeath94: szybkośc pisania kodu jest mniej więcej odwrotnie proporcjonalna do syzbkości wykonywania. i zabierając się do tego warto pomyśleć czy ta różnica w 20 milisekund jest warta by spędzić 2 doby więcej klepiąc kod w jakimś niskopoziomowym krejzolu, by uruchomić program trzy razy w swoim życiu.
@wkp22: Nie można przesadzać w żadną ze stron, bo dzięki takim hasłom rodzi się epoka programistów i projektantów, którzy w ogóle nie rozumieją idei optymalizacji i mówią, że "co to za problem, że nasza aplikacja wyświetlająca rozkład jazdy autobusów zajmuje 1 GB RAMu i na czterordzeniowym ARMie szuka połączenia z przystanku przez 30 sekund, przecież smartfony mają po osiem". Kolejowy rozkład jazdy HAFAS na Windows 95 robił to w kilka sekund
ok ludzie, to ja, ten kolega od csharpa. nie dawało mi to spokoju strasznie, że między wydajnością c++ i csharpa może być tak wielka różnica. wszystko przez to, że uwierzyłem na słowo, że tick to tick, różni sie dla procków wiadomo, ale to jest przyjęcie rozkazu. moje wątpliwości byly jeszcze spowodowane tym, że odpalam visuala na wirtualce, bo nie moge zainstalować net frameworka u siebie, bo jakiś poważny błąd rejestru, i za
@BloodDeath94: > Funkcja clock ( ) zwraca przybliżoną wartość czasu procesora zużytego przez program. Wartość ta jest wyrażona w jednostkach, których CLOCKSPERSEC przypada na jedną sekundę (czyli clock()/CLOCKSPERSEC jest czasem wyrażonym w sekundach). CLOCKSPERSEC zgodnie ze standardem POSIX powinnobyć stałą równą 1 000 000 bez względu na rzeczywistą wartość cyklu zegara.....

Jak jest?
Przekonajmy się

std::cout<<"ticks per sec: "<<CLOCKS_PER_SEC<<std::endl;
Wynik?

ticks per sec: 1000
@BloodDeath94: btw2

pogrzeb sobie w niecie i zastanów sie, dlaczego wszyscy piszą, że czas w ms oblicza się jako

(stop-start)/(CLOCKS_PER_SEC/1000)
a nie jak napisałeś w kodzie

(stop-start)/(CLOCKS_PER_SEC*1000)
matematyka zią, matematyka
@BloodDeath94: chciałem zrobić rzetelne testy w millisekundach, więc powieliłem ten nasz mały pliczek z danymi (150 linii) do pliku 108 MB (3 645 000 linii danych, 7441 ms, (liczyłem #!$%@? ze stoperem, więc Stopwatch nie kłamie)). mój program zdzierżył bez przeróbki, nawet średnie i te inne pierdoły policzył, twój nie chciał ruszyć, od razu sie wywalał. sprawdziłem plik 05 MB (15 000 linii), twój zdzierżył, 4.5 MB (150 000 linii) już
@BloodDeath94: wyłączyłem zapis danych z pliku do tablic dla dobra eksperymentu.

Czas 1: 75
Czas 2: 99134

C++ elapsed [ms]: 99059

aż przełączyłem na YT czekając aż program przerobi plik.

myślę, że to mój 5 i ostatni post na tym portalu. nie miałem o czym dyskutować. aż #!$%@? sobie nie zrobiłem zakupów przez to #!$%@? udowadnianie.

99059 ms bez otwarcia, zamknięcia pliku, i zapisu do tablic vs. 7441 ms ze wszystkim