Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [C++] velocità di * e abs()

    Secondo voi è più veloce fare un prodotto tra due interi o calcolarne il valore assoluto?

    è vero che le differenze sono poche, ma considerate che tale operazione è inserita in un ciclo lungo 972000 iterazioni, e quando i requisiti di progetto sono il real time(cioè 25 frame al secondo) anche guadagnare una frazione di decimo di secondo può far comodo!

  2. #2

    Re: [C++] velocità di * e abs()

    Originariamente inviato da codo82
    Secondo voi è più veloce fare un prodotto tra due interi o calcolarne il valore assoluto?
    impossibile dare una risposta in generale: dipende dal contesto.

  3. #3
    Secondo voi è più veloce fare un prodotto tra due interi o calcolarne il valore assoluto?
    Per toglierti il dubbio puoi misurare i tempi di esecuzione con funzioni tipo GetTickCount o QueryPerformanceCounter (se lavori su Windows) dopo aver abilitato le opportune opzioni di ottimizzazione. Quale compilatore usi?
    "Se riesci a passare un pomeriggio assolutamente inutile in modo assolutamente inutile, hai imparato a vivere."

  4. #4
    visual c++

    come funziona il QueryPerformanceCounter?

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2004
    Messaggi
    81
    Secondo il mio modesto parere, forse è più veloce l'abs, poichè per avere il valore assoluto basta effettuare delle semplici operazioni su bit. Controllare comunque, non costa nulla...
    Ciao!

  6. #6
    come funziona il QueryPerformanceCounter?
    codice:
    #include <iostream>
    #include <windows.h>
    
    using namespace std;
    
    int main(void){
    	LARGE_INTEGER freq, t1, t2, overhead;
    	if (QueryPerformanceFrequency(&freq))
    	{ 
    		QueryPerformanceCounter(&t1);
    		QueryPerformanceCounter(&t2);	
    		overhead.QuadPart = t2.QuadPart - t1.QuadPart;
    		QueryPerformanceCounter(&t1);
    		  for (int i = 0; i < 10; ++i)
    		  {
    		    // Codice loop
    			Sleep(100); // "Rallenta" l'esecuzione
    			cout << "Ciao Mondo!" << endl;
    		  }
    		QueryPerformanceCounter(&t2);
    		cout << "Tempo impiegato: " << (double) (t2.QuadPart - t1.QuadPart - overhead.QuadPart) / freq.QuadPart << endl;
    	}
    	else cout << "Impossibile ottenere la frequenza" << endl;
    	return 0;
    }
    o più semplicemente:

    codice:
    #include <iostream>
    #include <windows.h>
    
    using namespace std;
    
    int main(void){
    	int t1, t2;
    	t1 = GetTickCount();
    		  for (int i = 0; i < 10; ++i)
    		  {
    		    // Codice loop
    			Sleep(100); // "Rallenta" l'esecuzione
    			cout << "Ciao Mondo!" << endl;
    		  }
    	t2 = GetTickCount();
               cout << "Tempo impiegato (ms): " << t2-t1 << endl;
    	return 0;
    }
    "Se riesci a passare un pomeriggio assolutamente inutile in modo assolutamente inutile, hai imparato a vivere."

  7. #7

  8. #8
    se può in qualche modo interessare il più veloce è il prodotto, dopo di che viene il valore assoluto 'fatto in casa' cioè con if(x<0){x=-x;} e il più lento di tutti è il valore assoluto fatto con la funzione abs()!

  9. #9
    Dipende...

    Dipende dal compilatore, dalle opzioni di compilazione e da tanti altri fattori che probabilmente non hai preso in considerazione nel tuo "benchmark".

    il valore assoluto 'fatto in casa' cioè con if(x<0){x=-x;}
    Manca un pezzo... La tua funzione "fatta in casa" è stata dichiarata inline?
    "Se riesci a passare un pomeriggio assolutamente inutile in modo assolutamente inutile, hai imparato a vivere."

  10. #10
    compilatore visualc++ ottimizzato x velocità di codice

    la parte if(x<0){x=-x;} non è una funzione ma esattamente la riga di codice all'interno del ciclo


    ovviamente il mio test l'ho fatto con le condizioni di lavoro del progetto a cui sto lavorando(scusate la ripetizione) per la tesi

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.