• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Pomiar czasu C++ Java co robię źle

Object Storage Arubacloud
0 głosów
592 wizyt
pytanie zadane 4 czerwca 2018 w C i C++ przez konrad99 Gaduła (4,090 p.)
edycja 4 czerwca 2018 przez konrad99

Zmierzyłem czas wykonania rekurencyjnej implementacji ciągu Fibonacciego (wiem nie można ufać JVM ani dokładności ) ale czy te czasy są w miarę realnymi wynikami ?

C++ 2930 milisekund

JAVA 1865 millisekund

C 2893 milisekund

C++

#include <iostream>
#include <chrono>
#include<stdlib.h>
#include<time.h>
using namespace std;
static  long fibonaci( long wyraz)
{
 if(wyraz<=1)
 {
     return wyraz;
 }
 else{
  return  fibonaci(wyraz-1)+fibonaci(wyraz-2);
 }
}
int main()
{

    std::chrono::time_point<std::chrono::system_clock> now =
    std::chrono::system_clock::now();
     auto duration = now.time_since_epoch();
auto millis = std::chrono::duration_cast<std::chrono::milliseconds>(duration).count();

fibonaci(43l);

std::chrono::time_point<std::chrono::system_clock> now2 =
   std::chrono::system_clock::now();
     auto duration2 = now2.time_since_epoch();
     auto millis2 = std::chrono::duration_cast<std::chrono::milliseconds>(duration2).count();
     cout<<millis2-millis;
    return 0;
}

Java


public class Czas {
	public static long fib(long wa)  {
		
if(wa<=1)
{return wa;
	}
else {
	return fib(wa-1)+fib(wa-2);
}
	
	}
	
	
	
public static void main(String []args)
{
	System.out.printf("Wynik %d%n", fib(10));
	long millisActualTime = System.currentTimeMillis(); 
	fib(43);
	
	long executionTime = System.currentTimeMillis() - millisActualTime;
System.out.printf("Czas %d", executionTime);
}


}

Dodam że iteracyjne również Java jest szybsza

komentarz 4 czerwca 2018 przez mokrowski Mędrzec (155,460 p.)
fibonaci(43l); vs fib(43); ??
komentarz 4 czerwca 2018 przez konrad99 Gaduła (4,090 p.)
zauważyłem dało to kilka milisekund
komentarz 4 czerwca 2018 przez monika90 Pasjonat (22,940 p.)
słaby kompilator, ale można mu pomóc, zamiast static napisz constexpr
komentarz 4 czerwca 2018 przez konrad99 Gaduła (4,090 p.)
no tak :)

1 odpowiedź

0 głosów
odpowiedź 4 czerwca 2018 przez RafalS VIP (122,820 p.)
wybrane 4 czerwca 2018 przez konrad99
 
Najlepsza
Pomiar czasu w javie jest niedokladny: https://stackoverflow.com/questions/1770010/how-do-i-measure-time-elapsed-in-java?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa. Cytujac sedno wypowiedzi: "...you must use System.nanoTime(). You cannot use System.currentTimeMillis()" :p

Możesz tez sprpbowac skompilowac z jakimis flagami optymalizacji kod C i C++ np -O3. Nie wiem ile to da przy tak prpstym programie, ale przewaznie daje sporo. Poza flagami kompilatory C/C++ udostepniaja rozne znaczniki optymalizaxyjne w kodzie. Mysle ze z nimi java nie.mialaby szans :p
komentarz 4 czerwca 2018 przez j23 Mędrzec (194,920 p.)
edycja 4 czerwca 2018 przez j23

Dokładnie. U mnie z MinGW z flagą -O3 dał czas 3x mniejszy niż wersja Java.

 

clang++ widząc, że funkcja nie ma side effects, po prostu ją usuwa i daje czas 0 ms. Ale jak się przypisze wynik do zmiennej, którą później wysyła się na wyjście, kod jest równie szybki co javowy. Czyli wychodzi na to, że optymalizator w g++ jest lepszy.

//edit

Co ciekawe clang++ na constexpr nie reaguje (nie wiem, może złe parametry wywołania daję), g++ daje czas 0ms.

 

komentarz 4 czerwca 2018 przez mokrowski Mędrzec (155,460 p.)
Zareaguje i na constexpr. Z premedytacją niski poziom optymalizacji...

Przypadek 1:

https://godbolt.org/g/wQbzx4

Przypadek 2:

https://godbolt.org/g/NWLFEA
komentarz 4 czerwca 2018 przez j23 Mędrzec (194,920 p.)
Używałem wersji windowsowej, być może tu tkwi problem.

Podobne pytania

+1 głos
1 odpowiedź 277 wizyt
pytanie zadane 5 lipca 2015 w C i C++ przez k222 Nałogowiec (30,150 p.)
+1 głos
3 odpowiedzi 258 wizyt
pytanie zadane 22 sierpnia 2015 w PHP przez inny_sub Obywatel (1,120 p.)
0 głosów
2 odpowiedzi 173 wizyt
pytanie zadane 9 sierpnia 2016 w Java przez Serwex Użytkownik (810 p.)

92,583 zapytań

141,434 odpowiedzi

319,669 komentarzy

61,966 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...