Zeitmessung mit clock() und gettimeofday führt immer zu 0



  • Hi,

    ich würde gerne die Zeit, die die Ausführung einer Suchfunktion benötigt, messen. Die Umsetzung habe ich mit clock und gettimeofday versucht, doch beides führt immer zu 0. Das kann aber nicht sein, da meine Funktion definitiv ausgeführt wird.
    Ich habe die Funktion sogar 20000 mal ausführen lassen (bei einer Suche in 100000 Elementen) und trotzdem war angeblich keine Zeit vergangen. Das die Funktion wirklich ausgeführt wird, und auch tut was sie soll, habe ich getestet.

    Folgende 2 Varianten habe ich probiert, doch beide führen zu 0:

    #include <time.h>
    clock_t start, end;
    start = clock();
    ----hier führe ich meine Funktion aus------
    end = clock();
    
    cout << start << " bis " << end  << "\n";
    

    Dabei sind start und end immer gleich....
    Meine andere Variante wäre:

    #include <sys/time.h>
    timeval start, end;
    gettimeofday(&start, 0);
    -------hier führe ich wieder meine Funktion aus-----------------
    gettimeofday(&end, 0);
    cout << start.tv_sec << ':' << start.tv_usec << " bis "<< end.tv_sec << ':' << end.tv_usec<< endl;
    

    Auch hier simd Sekunde und milisekunde immer identisch.
    Kann mir jemand erklären woran das liegen kann?



  • Das sollte klappen. Zweimal.
    Versuchs doch mal mit std::chrono .

    auto start = high_resolution_clock::now();
    f();
    auto end = high_resolution_clock::now();
    auto diff = duration_cast<milliseconds>(end - start);
    


  • Wenn ich versuche

    #include<chrono>
    

    zu nutzen, bekomme ich folgende Fehlermeldung:

    c:\mingw\lib\gcc\mingw32\4.9.3\include\c++\bits\c++0x_warning.h:32:2: error: #error This file requires compiler and library support for the ISO C++ 2011 standard. This support is currently experimental, and must be enabled with the -std=c++11 or -std=gnu++11 compiler options.
    

    Mit mingw-get update und upgrade habe ich mingw gerade aktualisiert aber das löst das Problem nicht.
    Daher stellt sich die Frage:
    wie aktiviere ich "-std=c++11" oder "-std=gnu++11" mit clipse und mingw?



  • Suchst du die Compiler-Optionen.
    Versuchs mal hiermit, Post 3.
    Ich selbst hab den Eclipse noch nicht benutzt.
    Ich würde dir übrigens zu Code::Blocks oder dem QtCreator raten.



  • Das kann ich leider bei mir nicht reproduzieren...
    Wenn ich "-std=c++11" oder "-std=gnu++11" an der entsprechenden stelle (oder dem c++ äquivalent) eintrage, erhalte ich nur eine lange Fehlermeldung.

    Sie beginnt mit

    In file included from c:\mingw\include\wchar.h:208:0,
                     from c:\mingw\lib\gcc\mingw32\4.9.3\include\c++\cwchar:44,
                     from c:\mingw\lib\gcc\mingw32\4.9.3\include\c++\bits\postypes.h:40,
                     from c:\mingw\lib\gcc\mingw32\4.9.3\include\c++\iosfwd:40,
                     from c:\mingw\lib\gcc\mingw32\4.9.3\include\c++\ios:38,
                     from c:\mingw\lib\gcc\mingw32\4.9.3\include\c++\ostream:38,
                     from c:\mingw\lib\gcc\mingw32\4.9.3\include\c++\iostream:39,
                     from ..\src\Bachelorarbeit.cpp:9:
    c:\mingw\include\sys/stat.h:173:14: error: '_dev_t' does not name a type
     struct _stat __struct_stat_defined( _off_t, time_t );
    


  • Warum benutzt du nicht Visual Studio 2015?
    Aktuell ist gcc 6.1, da ist dein mingw Compiler mit 4.9 doch schon etwas alt.

    Zu deinem eigentlichen Problem: tut die Funktion denn auch etwas messbares? Wenn du im mit Optimizer bzw. im Releasemodus übersetzt (alles andere muss nicht gemessen werden!), darf der Compiler Dinge, die kein nach Außen sichtbares Ergebnis haben, einfach wegoptimieren.



  • Die Funktion durchläuft einen B-Baum und sucht dabei Elemente.
    Gibt es denn eine Möglichkeit dies mit meinem mingw compiler zu lösen? Ich habe leider keine Zeit mich jetzt dafür in visual studio einzuarbeiten, bin aber auf eine Zeitmessung angewiesen.



  • henuahinge schrieb:

    Gibt es denn eine Möglichkeit dies mit meinem mingw compiler zu lösen? Ich habe leider keine Zeit mich jetzt dafür in visual studio einzuarbeiten, bin aber auf eine Zeitmessung angewiesen.

    Wie gesagt, dein Code ist so wie du ihn postest, absolut korrekt.
    Siehe hier


Log in to reply