begin process at 2012 05 27 14:44:00
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Maths & Algorithmes

 > COMPARAISON DES PERFORMANCE D'ALGORITHMES POUR OPTIMISER UN CODE

COMPARAISON DES PERFORMANCE D'ALGORITHMES POUR OPTIMISER UN CODE


 Information sur la source

Note :
Aucune note
Catégorie :Maths & Algorithmes Classé sous :optimiser, performance, algorithme, temps, algo Niveau :Débutant Date de création :30/05/2008 Date de mise à jour :30/05/2008 17:47:59 Vu :4 626

Auteur : fuliculi

Ecrire un message privé
Commentaire sur cette source (0)
Ajouter un commentaire et/ou une note

 Description

Ce petit programme me permet de comparer les temps d'exécution d'algorithmes.

J'utilise la fonction QueryPerformanceCounter pour être le plus précis possible.
Le premier algo sert de temps de référence.
Ensuite, j'affiche l'écart de temps des autres algos en pourcentage (50% = 2x plus rapide / 100% = même vitesse / 200% = 2x plus lent)

Pour ne pas fausser les temps, je procède ainsi :
- je ferme toutes les applications risquant de surveiller les algos (anti-virus et firewall)
- je sélectionne le mode le plus rapide lors de la construction (mode 'Release')
- je lance le test en cliquant sur l'exe (et pas depuis Visual C++)

Dans l'exemple, je teste diverses méthodes d'écriture en boucle dans un vecteur.
Sur ma machine, la boucle est beaucoup plus performant avec l'opérateur [] qu'avec les fonctions membres begin() et end().

Je serais intéressé de connaître vos résultats pour d'autres algo comme les boucles for et while, l'usage de int ou long, ...

Source

  • #include <iostream>
  • #include <vector>
  • #include <windows.h>
  • #include <conio.h>
  • using namespace std;
  • /* REMARQUE : Pour ne pas fausser les temps, suivez les conseils suivants :
  • - Sélectionnez le mode le plus rapide lors de la construction (mode 'Release')
  • - Lancez le test en cliquant sur l'exe ou en ligne de commande. Ne pas le lancer depuis le debuggeur (Visual C++).
  • - Fermez toutes les applications risquant de surveiller votre algo (anti-virus, firewall)
  • */
  • /* Initilisation du chrono */
  • /* La fonction QueryPerformanceCounter sera utilisée pour gagner en précision (nanoseconde).*/
  • #define TIMER_INIT() \
  • LARGE_INTEGER freq, start, stop; \
  • if (!QueryPerformanceFrequency(&freq)) \
  • return -1;
  • /* Lancement du chrono */
  • #define TIMER_START() QueryPerformanceCounter(&start);
  • /* Arrêt du chrono et enregistrement du temps */
  • #define TIMER_STOP() \
  • QueryPerformanceCounter(&stop); \
  • if (_b==0) \
  • timeSumList.push_back(stop.QuadPart - start.QuadPart); \
  • else \
  • timeSumList[_algo++] += stop.QuadPart - start.QuadPart;
  • int main (int numArgs, char **args)
  • {
  • /* Nombre de boucle de test - Plus ce nombre est élevé, plus le test sera long mais plus les rapports de temps seront précis */
  • int numLoop = 10000;
  • /* Tableau de temps d'exécution / timeSumList[0]='Temps cumulés de l'algo0' / timeSumList[1]='Temps cumulés de l'algo1' */
  • vector<LONGLONG> timeSumList;
  • TIMER_INIT();
  • /* >>> Initialise les variables communes à tous les algos pour ne pas fausser les temps */
  • vector<int> intList;
  • for (int i=0; i<10000; ++i)
  • intList.push_back(0);
  • /* Lance les boucles de test */
  • for (int _b=0; _b<numLoop; ++_b)
  • {
  • int _algo = 0;
  • //*****************************************************************
  • TIMER_START();
  • {
  • /* >>> ALGO 0 : Ecriture dans un vecteur en utilisant l'opérateur [] */
  • int size = (int)intList.size();
  • for (int i=0; i<size; ++i)
  • intList[i] = 0;
  • }
  • TIMER_STOP();
  • //*****************************************************************
  • TIMER_START();
  • {
  • /* >>> ALGO 1 : Ecriture dans un vecteur en utilisant les fonctions membres begin() et end() */
  • vector<int>::iterator iter;
  • for (iter=intList.begin(); iter!=intList.end(); ++iter)
  • *iter = 0;
  • }
  • TIMER_STOP();
  • //*****************************************************************
  • TIMER_START();
  • {
  • /* >>> ALGO 2 : Ecriture dans un vecteur en utilisant les fonctions membres begin() et end() en initialisant les iterateurs */
  • vector<int>::iterator iter;
  • vector<int>::iterator iterBegin = intList.begin();
  • vector<int>::iterator iterEnd = intList.end();
  • for (iter=iterBegin; iter!=iterEnd; ++iter)
  • *iter = 0;
  • }
  • TIMER_STOP();
  • }
  • /* Le premier algo sert de temps de référence */
  • LONGLONG elapsedRef = timeSumList[0];
  • cout << "0 : 100%" << endl;
  • /* Affiche l'écart de temps des autres algos en pourcentage (50% = 2x plus rapide / 100% = même vitesse / 200% = 2x plus lent) */
  • int numTimes = (int)timeSumList.size();
  • for (int _i=1; _i<numTimes; ++_i)
  • cout << _i << " : " << (100*timeSumList[_i]/elapsedRef) << "%" << endl;
  • getch();
  • return 0;
  • }
#include <iostream>
#include <vector>

#include <windows.h>
#include <conio.h>

using namespace std;


/* REMARQUE : Pour ne pas fausser les temps, suivez les conseils suivants :
- Sélectionnez le mode le plus rapide lors de la construction (mode 'Release')
- Lancez le test en cliquant sur l'exe ou en ligne de commande. Ne pas le lancer depuis le debuggeur (Visual C++).
- Fermez toutes les applications risquant de surveiller votre algo (anti-virus, firewall)
*/


/* Initilisation du chrono */
/* La fonction QueryPerformanceCounter sera utilisée pour gagner en précision (nanoseconde).*/
#define TIMER_INIT() \
LARGE_INTEGER freq, start, stop; \
if (!QueryPerformanceFrequency(&freq)) \
	return -1;

/* Lancement du chrono */
#define TIMER_START() QueryPerformanceCounter(&start);

/* Arrêt du chrono et enregistrement du temps */
#define TIMER_STOP() \
QueryPerformanceCounter(&stop); \
if (_b==0) \
	timeSumList.push_back(stop.QuadPart - start.QuadPart); \
else \
	timeSumList[_algo++] += stop.QuadPart - start.QuadPart;



int main (int numArgs, char **args)
{
	/* Nombre de boucle de test - Plus ce nombre est élevé, plus le test sera long mais plus les rapports de temps seront précis */
	int numLoop = 10000;

	/* Tableau de temps d'exécution / timeSumList[0]='Temps cumulés de l'algo0' / timeSumList[1]='Temps cumulés de l'algo1' */
	vector<LONGLONG> timeSumList;


	TIMER_INIT();


	/* >>> Initialise les variables communes à tous les algos pour ne pas fausser les temps */
	vector<int> intList;
	for (int i=0; i<10000; ++i)
		intList.push_back(0);


	/* Lance les boucles de test */
	for (int _b=0; _b<numLoop; ++_b)
	{
		int _algo = 0;

		//*****************************************************************

		TIMER_START();

		{
			/* >>> ALGO 0 : Ecriture dans un vecteur en utilisant l'opérateur [] */
			int size = (int)intList.size();
			for (int i=0; i<size; ++i)
				intList[i] = 0;
		}

		TIMER_STOP();

		//*****************************************************************

		TIMER_START();

		{
			/* >>> ALGO 1 : Ecriture dans un vecteur en utilisant les fonctions membres begin() et end() */
			vector<int>::iterator iter;
			for (iter=intList.begin(); iter!=intList.end(); ++iter)
				*iter = 0;
		}

		TIMER_STOP();

		//*****************************************************************

		TIMER_START();

		{
			/* >>> ALGO 2 : Ecriture dans un vecteur en utilisant les fonctions membres begin() et end() en initialisant les iterateurs */
			vector<int>::iterator iter;
			vector<int>::iterator iterBegin = intList.begin();
			vector<int>::iterator iterEnd = intList.end();
			for (iter=iterBegin; iter!=iterEnd; ++iter)
				*iter = 0;
		}

		TIMER_STOP();
	}


	/* Le premier algo sert de temps de référence */
	LONGLONG elapsedRef = timeSumList[0];
	cout << "0 : 100%" << endl;

	/* Affiche l'écart de temps des autres algos en pourcentage (50% = 2x plus rapide / 100% = même vitesse / 200% = 2x plus lent) */
	int numTimes = (int)timeSumList.size();
	for (int _i=1; _i<numTimes; ++_i)
		cout << _i << " : " << (100*timeSumList[_i]/elapsedRef) << "%" << endl;


	getch();

	return 0;
}




 Sources du même auteur

Source avec Zip Source avec une capture FLASH EN MFC

 Sources de la même categorie

Source avec Zip UN EXAMPLE D'APPLICATION EN CUDA DE L'ALGORITHME DE SCAN POU... par oguzaras
Source avec Zip Source avec une capture CHIFFREMENT DE VIGENERE par lajouad
Source avec Zip Source avec une capture ANALYSE SYNTAXIQUE par lajouad
Source avec Zip Source avec une capture STRUCTURE D'UNE MATRICE PAR LES LISTE LINÉAIRE (NON CONTUGUS... par benzarabel
Source avec Zip Source avec une capture DESSINER UNE ARBRE BINAIRE( MODE CONSOLE): par benzarabel

 Sources en rapport avec celle ci

GESTION D'UN ARBRE BINAIRE PAR LES CLASSES par UKR6900
GESTION D'UNE PILE PAR LES CLASSES par UKR6900
Source avec Zip Source avec une capture RECHERCHE OPERATIONNELLE : ALGORITHME DU SIMPLEXE par susur2002
Source avec Zip ALGORITHME DE RECHERCHE DICHOTOMIQUE par deck_bsd
Source avec Zip COMPARAISON DES ALGORITHMES DE TRIS EN C par NSV

Commentaires et avis

Aucun commentaire pour le moment.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Rendre un alogorithme C plus rapide ! [ par Optitech ] Bonjour @ tous !Voici j'ai un algo en C. Cet algo sert &#224; calculer la suite de fibonacci.Pour ceux qui ne la connaisse, ma suite de fibonacci est prob d'algorithme dans matrice [ par gregorian ] Bonjour, Voila je dois &#233;crire un prg en C qui joue avec des matrices bool&#233;ennes.J'ai d&#233;j&#224; fait la partie addition, multiplication, algorithme de lemmatisation HELP [ par spamoutik ] salut!je ne sais pas si je suis ds la bonne section pour ce poste mais bon,je cherchais un algorithme de la lemmatisation de mot et je suis tombé sur Algorithme de visio conference [ par Timwaz ] Bonjour, Je dois pour un projet présenter un algo de visioconference (système simple). Cela fait suite à un cours de programmation système sous linux algo canny [ par salma2011 ] Slt tt le monde,,Je veux detecter les contours d'une image avec l'algorithme de canny  en utilisant le langage c++  ..je veux un simple code( en c++ ) Algo de placement par rapport a des periodes donees [ par romfret1 ] Bonjour le forum, Dans un projet de Gestion de camping, je voudrais un algorithme permettant l'optimisation d'attributions d'emplacements par rapport code c , c++ en algorithme genetique pour optimiser une fonction non lineaire [ par dandee2 ] bonjour ,  ou  est ce que je peux trouver en language c++ un code source en algorithme genetique pour optimiser la fonction  :F(x,y,z)=x4.y4.z4-y4.z+e algorithme de reconnaissance de forme [ par famalala ] Bonjour, j'ai un projet qui est sur la reconnaissance de panneaux de signalisation. J'ai trouvé un algo de reconnaissance de couleur et je l'ai déja genie logieciel [ par ayoublim ] bonjour tout le monde ,j'aimerai bien savoir tout ce qui concerne la branche génie logiciel et comment organiser le temps pour être efficace en applic compte à rebours en c++ et + [ par tiouil ] Bonjour, je programme en c++ sur linux (debian / ubuntu) et je creer le jeu diamant, (il faut aligner trois formes). Je souhaite ajouter un "bonus" c


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,827 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales