clock() funzt nit



  • Hi Leute,
    ich habe ein bisschen Code geschrieben und möchte die Berechnungzeit am Ende ausgeben lassen. Dabei kommt es mir nicht auf jede Millisekunde an. Die ganze Sache sollte mit clock() doch funktionieren,oder??
    Hier mal der Code:

    #include "sd_digit.h"
    #include "sd_digit_long.h"
    #include "stimulus.h"
    #include <math.h>
    #include <cstdlib>
    #include <ctime>
    
    void inline sc_trace( sc_trace_file* tf, const SD_Number& a, const sc_string& name) {
    }
    
    inline ostream& operator << ( ostream& os, const SD_Number& a ) {
        os << "streaming of SD_Number not implemented";
        return os;
    }
    
    void stimulus::gen_data() {
    
    	SD_Number		temp1,temp2, a,b;
    	SD_Number_long	r;
    
    	// Additionszyklus OpCode[0] = 0 und OpCode[1] = 0 
    	OpCode[0].write(false)  ;
    	OpCode[1].write(false) ;
    //	cout << "gen_for_Addition" <<"\n";
    	for (int i1 = 0; i1 < pow(2,WORDLENGTH); i1++) 
    		for (int i2 = 0; i2 < pow(2,WORDLENGTH); i2++) {
    
    			temp1=i1;
    			temp2=i2;
    			A.write(temp1) ;
    			B.write(temp2) ;
    
    	/*
    				cout << "gen_data : A = " << i1 << " = ";
    				for (int i =WORDLENGTH-1; i>=0;i--) {
    					cout  << temp1.a[i] ;
    				};
    				cout <<" ; ";
    
    				cout << "B = " << i2 << " = ";
    				for (int i =WORDLENGTH-1; i>=0;i--) {
    					cout  << temp2.a[i] ;
    				};
    				cout <<"\n";
    
    	*/			
    
    			wait() ;
    		} ;
    
    	// Subtraktionszyklus OpCode[0] = 1 und OpCode[1] = 0 
    	OpCode[0].write(true)  ;
    	OpCode[1].write(false) ;
    //	cout << "gen_for_Subtraktion" <<"\n";
    	for (int i1 = 0; i1 < pow(2,WORDLENGTH); i1++) 
    		for (int i2 = 0; i2 < pow(2,WORDLENGTH); i2++) {
    
    			temp1=i1;
    			temp2=i2;
    			A.write(temp1) ;
    			B.write(temp2) ;
    
    	/*
    				cout << "gen_data : A = " << i1 << " = ";
    				for (int i =WORDLENGTH-1; i>=0;i--) {
    					cout  << temp1.a[i] ;
    				};
    				cout <<" ; ";
    
    				cout << "B = " << i2 << " = ";
    				for (int i =WORDLENGTH-1; i>=0;i--) {
    					cout  << temp2.a[i] ;
    				};
    				cout <<"\n";
    	*/				
    
    			wait() ;
    		} ;
    
    	// Multiplikationszyklus OpCode[0] = 0 und OpCode[1] = 1 
    	OpCode[0].write(false) ;
    	OpCode[1].write(true) ;
    //	cout << "gen_for_Multiplikation" <<"\n";
    	for (int i1 = 0; i1 < pow(2,WORDLENGTH); i1++) 
    		for (int i2 = 0; i2 < pow(2,WORDLENGTH); i2++) {
    
    			temp1=i1;
    			temp2=i2;
    			A.write(temp1) ;
    			B.write(temp2) ;
    
    	/*
    				cout << "gen_data : A = " << i1 << " = ";
    				for (int i =WORDLENGTH-1; i>=0;i--) {
    					cout  << temp1.a[i] ;
    				};
    				cout <<" ; ";
    
    				cout << "B = " << i2 << " = ";
    				for (int i =WORDLENGTH-1; i>=0;i--) {
    					cout  << temp2.a[i] ;
    				};
    				cout <<"\n";
    
    	*/			
    
    			wait() ;
    		} ;
    
    	// Divisionszyklus OpCode[0] = 1 und OpCode[1] = 1 
    	OpCode[0].write(true)  ;
    	OpCode[1].write(true) ;
    //	cout << "gen_for_Division" <<"\n";
    	for (int i1 = 0; i1 < pow(2,WORDLENGTH); i1++) 
    		for (int i2 = 0; i2 < pow(2,WORDLENGTH); i2++) {
    
    			temp1=i1;
    			temp2=i2;
    			A.write(temp1) ;
    			B.write(temp2) ;
    
    	/*
    				cout << "gen_data : A = " << i1 << " = ";
    				for (int i =WORDLENGTH-1; i>=0;i--) {
    					cout  << temp1.a[i] ;
    				};
    				cout <<" ; ";
    
    				cout << "B = " << i2 << " = ";
    				for (int i =WORDLENGTH-1; i>=0;i--) {
    					cout  << temp2.a[i] ;
    				};
    				cout <<"\n";
    
    	*/			
    
    			wait() ;
    		} ;
    
    }
    
    void stimulus::write_erg() {
    
    	// Zeitmessung
    	clock_t		t1 = clock();
    
    	sc_bv<2*WORDLENGTH>  Afinal ;
    	int                op_zyklus = 0  ; // zeigt an, welche Operation gerade simuliert wird
    										// add = 0; sub = 1; mul = 2; div = 3;
    	char               op_sign[5] = {'+','-','*','/'} ;
    	int					Afinaldec,add_errors,sub_errors,mult_errors,div_errors;		// für Ergebnis in Decimalzahldarstellung, Fehleranzahl
    
    	add_errors=sub_errors=mult_errors=div_errors=0;
    	zyklus = -2*WORDLENGTH-3;
    	cout << "\nBeginn der Simulation der Addition\n" ;
    	int i1=0;
    	int i2=0;
    	while (1) {
    	    Afinal = Erg.read() ;	         // Einlesen des berechneten Ergebnisses
    		Afinaldec = 0;
    		if ((zyklus >= 0))   {   // WORDLENGTH Zyklen Einschwingvorgang überbrücken
    	/*		cout << zyklus << "  " << "Berechne  " 
    				<< zyklus / (int)pow(2,WORDLENGTH)
    				<< " " << op_sign[op_zyklus] << " " 
    				<< zyklus % (int)pow(2,WORDLENGTH) << "  " ;
    			cout << Afinal ;
    	*/		for (int i = 0; i<2*WORDLENGTH; i++) {
    				   if (Afinal[i] == true) Afinaldec = Afinaldec + (int)pow(2,i);
    			}
    	//		cout << " = "<< Afinaldec << "\t\t" ;
    
    			if (erg_correct(i1,i2,Afinaldec,op_zyklus)==false) {
    				switch (op_zyklus) {
    					case 0: add_errors++;
    							break;
    					case 1: sub_errors++;
    							break;
    					case 2: mult_errors++;
    							break;
    					case 3: div_errors++;
    							break;
    				}
    	//			cout << "Fehler !!!\n";
    			}
    	//		else cout << "\n";
    
    			i2++;
    			if (i2>=pow(2,WORDLENGTH)) {
    				i2=0;
    				i1++;
    			}
    
    		}
    		zyklus++ ;
    
    		if ((op_zyklus==simulated_operations-1) && (zyklus==pow(2,WORDLENGTH*2))) {
    			clock_t t2 = clock();
    			clock_t tdif = t2-t1; 
    			int zeit;
    			zeit = tdif/CLOCKS_PER_SEC; 
    			cout << "benötigte Zeit: " << zeit;
    			print_errors(add_errors,sub_errors,mult_errors,div_errors);
    		}
    
    		if ((zyklus == pow(2,WORDLENGTH*2)) && (op_zyklus == 0)) {
    			op_zyklus++ ;
    			zyklus = 0 ;
    			i1=i2=0;
    			switch (op_zyklus) {
    				case 1: 
    				   cout << "\nBeginn der Simulation der Subtraktion\n" ;
    				   break ;
    			}
    		}
    
    		if ((zyklus == pow(2,WORDLENGTH*2)) && (op_zyklus == 1)) {
    			op_zyklus++ ;
    			zyklus = 0 ;
    			i1=i2=0;
    			switch (op_zyklus) {
    				case 2: 
    				   cout << "\nBeginn der Simulation der Multiplikation\n" ;
    				   break ;
    			}
    		}
    
    		if ((zyklus == pow(2,WORDLENGTH*2)) && (op_zyklus == 2)) {
    			op_zyklus++ ;
    			zyklus = 0 ;
    			i1=i2=0;
    			switch (op_zyklus) {
    				case 3: 
    				   cout << "\nBeginn der Simulation der Division\n" ;
    				   break ;
    			}
    		}
    
    	wait() ;
    	} ;
    
    }
    
    bool erg_correct(int i1, int i2, int ergebnis,int operation) {
    
    	switch (operation) {
    		case 0: 
    			ergebnis -= i1 + i2;
    			break;
    		case 1: 
    			if ((i1-i2)<0) 
    				ergebnis -= pow(2,WORDLENGTH+1) + (i1-i2);
    			else ergebnis -= i1 - i2;
    			break;
    		case 2:
    			ergebnis -= i1 * i2;
    			break;
    		case 3:
    			if (i2 != 0) ergebnis -= div(i1,i2).quot;
    			else ergebnis -=0;
    			break;
    	}
    
    	if (ergebnis == 0) 
    		return true;
    	else return false;
    
    }
    
    void print_errors(int add_errors,int sub_errors,int mult_errors,int div_errors) {
    
    	cout << "\nAdditionsfehler: " << add_errors;
    	cout << "\nSubtraktionsfehler: " << sub_errors;
    	cout << "\nMultiplikationsfehler: " << mult_errors;
    	cout << "\nDivisionsfehler: " << div_errors;
    	cout << "\n-----   Gesamt: " << add_errors+sub_errors+mult_errors+div_errors << " Fehler gefunden  -----\n";	
    }
    

    Ich bekomme aber immer diese Fehlermeldung:
    error C2661: '()' : Keine ueberladene Funktion akzeptiert 0 Parameter
    error C2064: Ausdruck ergibt keine Funktion

    Ich arbeite übrigens mit MVC 6.0, falls das was damit zu tun haben könnte!?

    Grüße Mario



  • herzlichen glückwunsch.
    sie haben es soeben geschafft nach einer funktion zu fragen, und dann 200 zeilen code zu posten.
    dabei haben sie auch noch die meisterleistung erbracht, die zeilenangabe bei den fehlermeldungen zu löschen, bzw die fehler im qc kenntlich zu machen



  • Upps, sorry war keine Absicht.
    Der Compiler meldet beide Fehler jeweils in Zeile 172 und 228.

    Oder, ums mal kurz zu machen, warum geht

    clock_t t1 = clock();
    

    nicht??
    Hab diesen Vorschlag in anderen Posts gefunden und da schien es zu funktionieren.

    mfg mdsnake



  • Ich kenne deinen fehler auch nicht, und werde
    ihn auch nicht suchen...

    Aber, ich hab fürs zeitmessen mal ne Klasse geschrieben,
    evtl. hilft dir dies weiter.

    Zeitmessen

    Devil



  • time.h fehlt bei den includes
    @devil wieso zeitmessklasse, wenn man doch direkt auf die prozessor clocktime zugreifen kann?

    hab mir ma die klasse angeschaut, ein copy ctor der nichts macht, aber auch nicht private ist,ein ctor ohne initialisierungsliste,und generell ist die klasse in punkto messpunkte setzen sehr sparsam/dh man kann nur start/end setzen,für mehr messpunkte braucht man mehr klassen.



  • otze schrieb:

    time.h fehlt bei den includes
    @devil wieso zeitmessklasse, wenn man doch direkt auf die prozessor clocktime zugreifen kann?

    Die Klasse macht auch nix anderes, ist aber idioten sicher 😉

    Devil



  • Danke für die Klasse, müßte doch aber auch so gehen.
    Im endeffekt machst du dort auch nichts anderes als ich.
    Irgendwie hat meine Compiler Probleme mit Zuweisungen der Art:

    clock_t t_start;
    t_start = clock();
    

    Ich habe auch noch die "time.h" (obwohl die Fkt. ja zu <ctime> gehören soll)included, funzt aber trotzdem nicht! (selbe Fehlermeldung). Könnte es sein, dass in Visual Studio 6.0 der C++ Compiler mit anderen(alten) Librarys arbeitet die diese Funktion nicht, oder anders, unterstützen ??

    mfg mdsnake



  • schau ma bei dir in der hilfe nach





  • Tschia, leider ist die Hilfe(MSDN) bei meiner Version nicht auf der CD gewesen und die aktuelle wird mir sicher keine Aussage über meine Version ermöglichen. Ich schau mir aber grad mal die time.h meines Compilers an.
    Mal schauen...

    mfg mdsnake



  • Mis2com schrieb:

    In C++ übrigens ctime statt time.h:
    http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&faq=iostream#Answ

    weis ich, dass das ein standardheader ist? ich schau in die hilfe und seh nur header time.h-.-


Anmelden zum Antworten