Pour les avoir testée sur du traitement d'image en temps réel, ou les algos sont deja bien trapus, avec des matrices lourdes; j'ai constaté de réelles différences entre mon code genere a la main et du code optimise par compilo.
Essaye de comparer ces 3 fonctions en temps d'executions, et imagine toi 5000 appels de cette fonction par secondes... la difference est visible.
Si t'arrives a genere un code aussi rapide sans optimisations juste avec les optimisations compilo, ca m'interresse !!!!
Prb :
Recherche de la plus proche puissance de 2 superieure.
/*sans optimisation*/
int p2(p)
{
return 1 << (int) ceilf(logf((float) p) / M_LN2);
}
===========================
/*avec*/
#define lowest_bit(x) (x & -x)
#define is_pow2(x) (x != 0 && x == lowest_bit(x))
static int ceil_pow2_minus_1(unsigned int x)
{
unsigned int i;
for (i=1; i; i <<= 1)
x |= x >> i;
return x;
}
#define p2(p) (is_pow2(p)?p:ceil_pow2_minus_1((unsigned int) p) + 1)
====================
/* pareil*/
int p2(p){
p -= 1;
p |= p >> 16;
p |= p >> 8;
p |= p >> 4;
p |= p >> 2;
p |= p >> 1;
return p + 1;
}
=========================
[^] # Re: Informatique : Optimisation, minimisation, projet
Posté par tuan kuranes (site web personnel) . En réponse au journal Informatique : Optimisation, minimisation, projet. Évalué à 1.
Essaye de comparer ces 3 fonctions en temps d'executions, et imagine toi 5000 appels de cette fonction par secondes... la difference est visible.
Si t'arrives a genere un code aussi rapide sans optimisations juste avec les optimisations compilo, ca m'interresse !!!!
Prb :
Recherche de la plus proche puissance de 2 superieure.
/*sans optimisation*/
int p2(p)
{
return 1 << (int) ceilf(logf((float) p) / M_LN2);
}
===========================
/*avec*/
#define lowest_bit(x) (x & -x)
#define is_pow2(x) (x != 0 && x == lowest_bit(x))
static int ceil_pow2_minus_1(unsigned int x)
{
unsigned int i;
for (i=1; i; i <<= 1)
x |= x >> i;
return x;
}
#define p2(p) (is_pow2(p)?p:ceil_pow2_minus_1((unsigned int) p) + 1)
====================
/* pareil*/
int p2(p){
p -= 1;
p |= p >> 16;
p |= p >> 8;
p |= p >> 4;
p |= p >> 2;
p |= p >> 1;
return p + 1;
}
=========================