Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[TUT][C++] Mierzenie czasu wykonywania algorytmu


Rekomendowane odpowiedzi

Opublikowano

Pewnie wiele razy chcieliscie sprawdzic ktory algorytm wykonuje sie szybciej, lecz nie wiedzieliscie jak, od dzisiaj nie bedziecie miec tego problemu :D

a wiec, oto kod:

 

#include <iostream> 
#include <ctime> 
using namespace std;
int main()
{		
double roznica;
cout.setf(ios::fixed); //notacja zwykla, czyli nie wywali wyniku typu 1.175000e+003	
cout.precision(5); //liczba miejsc po przecinku, dokladnosc naszego wyniku	
clock_t start, koniec; //inicjacja zmiennych zegarowych	
start=clock(); //zapisanie czasu startu mierzenia	
//----------------------------------------	
//tutaj wklej kod, ktorego czas bedziesz mierzyc	
//----------------------------------------	
koniec=clock();//zapisanie konca mierzenia	
roznica=(koniec-start)/(double)CLOCKS_PER_SEC;//obliczenie roznicy, czyli czasu wykonania	
cout<<"Czas wykonania: "<<roznica<<endl;
return 0;
}
Na ponizszych ssach macie przyklad uzycia programu:

 

m07f.png

XjYnicC.png

 

Jak widac, printf jest prawie sekunde szybszy od couta z wlaczona synchronizacja podczas wypisywania 1000 linijek tekstu.

Aby wyniki byly miarodajne nalezy testowac wszystko w petlach, ktore beda mialy licznik rzedu 1000-2000.

Opublikowano

Dla dokładniejszych pomiarów pod Windowsem warto wykorzystać funkcje WinAPI QueryPerformacneCounter / QueryPerformanceFrequency. Więcej info w MSDN.

Ludzie znają mnie jako kill1212. Moje prace w WR można obejrzeć na youtube

Opublikowano

Lub można też z Windows.h, GetTickCount

 

np. Obliczanie ciągu fibonacciego + czasu wykonywania pętli z wykorzystaniem rekurencji, jest dużo szybszy i wydajniejszy ale daje tylko przykład.

 

 

#include <iostream>
#include <windows.h>
#pragma hdrstop

using namespace std;

int fib(int n);

int main()
{
    
    int n, asd, czas1,czas2;
    cout << "podaj ciag ";
    cin >> asd;
//powyżej 45 jest wolnooo...
        if (asd +1 > 99)
        {
            cout << "podaleś za duzy wynik " << endl;
            return 0;
        }
        //GetTickCount() czas wykonywania jednej pętli
        czas1=GetTickCount();
        for (int n = 1; n < asd+1; n++)
            {
                czas2=GetTickCount() - czas1;
                cout << "["<< n << "]" << " " << fib(n) << "\t | \t" << czas2 / 1000.00 << "sec" << endl;
            }
    
                cout << "\a \nZakonczono ! \n\n" << endl;
    

    return 0;
}

int fib(int n)
{

        if (n < 3)
        {
            return(1);
        }
        else
            return(fib(n-2) + fib(n-1));
}
 

Opublikowano

A nie prościej i szybciej tak:

#include <iostream>
#include <time.h>
using namespace std;

int main(void){
	time_t TimeStart, TimeEnd;
	time(&TimeStart);
	
	//CODE
	for(int i = 0; i <= 30000; i++){
	cout << "\r" << i;
	}
	cout << endl;
	
	
	time(&TimeEnd);
	cout << "Execution time: " << difftime(TimeEnd, TimeStart) << " sec"<< endl;
	
	return 0;
}

 

Opublikowano
#include <iostream>
#include <ctime>
 
int main(void){
	clock_t start = clock();
	
	//twój magiczny kod
	
	std::cout << "\n" << clock()-start << "\n";
	
	return 0;
}

Jak już się tak długości czepiasz...

Nie pomagam na PW, od tego macie forum!!!

 

#PHP-things

 

 

08FMpDu.png

 

Opublikowano

Powodzenia z includowaniem Windows.h pod linuxem.

chciałeś się pochwalić bystrością swojego szarego umysłu =)?

 

po pierwsze ja podałem jedno z wielu rozwiązań o tak...

po drugie większość ludzi ma windowsy, taka prawda...

o ile mi wiadomo jeżeli chcesz uruchomić plik pod jakimkolwiek unixie musisz pod niego tak czy siak skompilować.

Opublikowano

chciałeś się pochwalić bystrością swojego szarego umysłu =)?

 

po pierwsze ja podałem jedno z wielu rozwiązań o tak...

po drugie większość ludzi ma windowsy, taka prawda...

o ile mi wiadomo jeżeli chcesz uruchomić plik pod jakimkolwiek unixie musisz pod niego tak czy siak skompilować.

Po trzecie, większość serwerów ma linuxa.

Po czwarte, lepiej stosować bibliotek uniwersalne.

Po piąte, w USA już wyewoluowali i używaja urządzeń Apple i w osx/ios'ie nie ma Windows.h.

Nie pomagam na PW, od tego macie forum!!!

 

#PHP-things

 

 

08FMpDu.png

 

Opublikowano

Po trzecie, większość serwerów ma linuxa.

Po czwarte, lepiej stosować bibliotek uniwersalne.

Po piąte, w USA już wyewoluowali i używaja urządzeń Apple, i w osx/ios'ie nie ma Windows.h.

jeżeli się robi aplikację na skalę światową to myśli się o kodzie na wiele platform, ja tylko podałem 1 z wielu sposobów...

Opublikowano

Pod linuxem używa się gettimeofday, gdyż czas mierzony jest bardzo dokładnie.

Można też użyć funkcji rdtsc w assemblerze lub _rdtsc() intrinsic.

 

dawid55d, w Windowsie GetTickCount nie daje miarodajnych wyników (rozbieżność jest rzędu 10-16 ms - nawet na MSDN o tym jest napisane)

Ludzie znają mnie jako kill1212. Moje prace w WR można obejrzeć na youtube

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...