1

Je voulais savoir si optimiser des strucutres ou matrices assez lourdes du genre TEXT[nb_str].chaine[str_pos]; par un simple pointeur à l'intérieur d'une boucle est valable dans tout les cas ?

Parce-ce que j'ai effectué plusieurs tests qui me donnent des résultats assez bizarres :

Voici mon code non optimisé (enfin que je suppose non optimisé)

for(a=0;a<value;a++)
{
TEXT[nb_str].chaine[str_pos++]=Char;
}


Et voici maintenant l'optimisation que j'ai tenté :

char *temp_text = TEXT[nb_str].chaine;
for(a=0;a<value;a++)
{
temp_text[str_pos++] = Char;
}

Et la structure :

typedef struct
{
char chaine[50];
Str_Mode param;

}Text;

Le tableau TEXT est alloué dynamiquement.

Dans le premier cas l'exécution prend toujours le même temps et dans le deuxième cas (celui qui utilise le pointeur) autant l'éxécution peut-être bien plus rapide autant des fois ça ne change rien (c'est tout juste si c'est même pas pire).
Pour faire mes tests j'utilise les timers.

Donc je voulais savoir si l'optimisation, que j'ai réalisé est vraiment une optimisation ?


www.wikio.fr/user1921&info=comments

2

Regarde le code en ASM pour voir ce qui change.
Sinon, écris ton code en ASM. Si tu as beosin d'une telle précision d'optimisation, tu auras de bie meilleurs résultats en ASM.

Sinon, ton optimisation me paraissait inutile à première vue. Je pensais que si nb_str ne changeait pas pendant la boucle, TIGCC ne recalculerait pas à chaque fois quel TEXT on veut. Mais apparamment, tes mesures donnent des résultats différents pour les deux codes....
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

3

Bah justement je ne savais pas si TIGCC l'optimisait ou pas... ce qui me surprend le plus c'est qu'en coup l'optimisation que j'ai tenté est efficace et tantôt d'autre fois elle paraît inutile.
Parce-qu'en fait kà je suis entrain de programmer un parser et ce code correspond à une toute petite partie du 'compilateur' mais je l'utilise aussi à d'autre endroit et ça constitue une part importante dans l'analyse du programme.
Avec un fichier de 14 ko ça met 27 s et je trouve que c'est un peu trop lent (enfin j'ai qd même une barre de loading pour regarder la progression qui prend pas mal de ressources et puis les timers).
Mais au moins sur 27 s je suis sûr de réaliser un test qui soit significatif mais en fait, non.
www.wikio.fr/user1921&info=comments

4

Et sinon je ne me suis pas encore mis à l'asm. sad Et là le code est déjà vachement compliqué en C, enfin pas c'est partie là, mais l'ensemble de la partie 'compilation'.
www.wikio.fr/user1921&info=comments

5

Raphaël :
char *temp_text = TEXT[nb_str].chaine;
for(a=0;a<value;a++)
{
temp_text[str_pos++] = Char;
}

Bah déjà tant qu'à optimiser, autant écrire :

char *temp_text = TEXT[nb_str].chaine;

for (a = value; a--;[b][/b])
 {
 *temp_text++ = Char;
 }


Mais c'est vrai que théoriquement ça devrait avoir le même résultat dans les deux cas. Tu es sûr que Char (et peut-être str_pos, supprimé dans l'exemple ci-dessus) ne sont pas à l'origine du problème ?

[edit] t1 de smiley...
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

6

Ouch 27s ça me paraît un peu beaucoup en effet... sad
c'est pour parser quoi, ton prog ? smile
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

7

Euh,non il fait 24 ko, le fichier. J'ai qd même refait moi même toutes les routines pour manipuler les chaînes donc ça pourrait être pire !
Mais sinon pour les petits fichiers, car 24 ko c'est qd même énorme, ça va très très vite.

Alors sinon mon programme parse des fichiers texte qui sont écrits dans un langage un peu particulier que je suis entrain de mettre au point.
Il permet de faire du texte en niveau de gris, du texte animés, d'inclure des lignes de texte d'autres fichiers textes sur la Ti, d'utiliser les 3 fonts et tout pleins de modes en mêmes temps du genre souligné, surligné, des chaînes avec des caractères qui se touches.
il permet aussi de centrer du texte, de faire des retrait et le tout soit avec des paramètres soit avec des "balises" toutes faites du genre <titre> ou <bannière>.
Mais mon programme formate le texte ligne par ligne.
www.wikio.fr/user1921&info=comments