300

Thibaut (./294) :
GTC met 38% de temps en plus pour réfléchir (pourcentage moyen basé sur -Os et -O3 pour le moment).
Sachant que les algorithmes alpha-bêta/mini-max utilisé dans l'IA sont massivement récursifs, j'en déduis que GTC est moins performant que TIGCC pour faire des appels de fonction. Pollux, tu penses que c'est arrangeable ?

La différence de temps ne vient pas de la récursion ; ça vient principalement d'une petite boucle, où TIGCC à réussi à déterminer qu'une valeur était constante et a pu sortir son calcul de la boucle, alors que GTC ne l'a pas fait. Si on fait le simple patch suivant dans la fonction update_score() :
    for (i=0; i<win_places; i++) {
        if (map[x][y][i]) {
=>
    Boolean *mapxy = map[x][y];
    for (i=0; i<win_places; i++) {
        if (mapxy[i]) {
alors GTC devient à peu près aussi rapide que TIGCC. Bref, comme je l'avais expliqué dans un post précédent, les bench de vitesse, c'est très très aléatoire, et ça dépend vraiment du style de l'auteur. Et puis bon, un auteur qui cherche à optimiser son programme en vitesse aura tendance à faire du profiling, et fera naturellement des petites optimisations du style de celle que j'ai données ; ça paraît donc logique que le compilateur que l'auteur a utilisé pour écrire son programme soit un peu plus efficace parce que les petites optimisations qu'il aura intégrées au programme sont adaptées au compilateur smile D'ailleurs dans cette même fonction update_score() il y avait déjà une de ces petites optimisations :
short **current_score_array = current_state->score_array; pour indiquer au compilateur que current_state->score_array est constant et que son calcul doit être sorti de la boucle.

Accessoirement c'est illusoire de croire qu'on peut compter sur le compilateur pour faire ce genre d'optimisation à la place du programmeur : s'il y avait eu la moindre modification de pointeur en mémoire, ou le moindre appel de fonction à l'intérieur du bloc if, la transformation n'aurait pas été faite et la petite optimisation manuelle que j'ai donnée aurait été obligatoire pour pouvoir gagner de l'ordre de 30-40% en vitesse ^^

(cela dit, je reconnais que TIGCC est pas mauvais du tout pour ce genre d'optimisations top)

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

301

D'accord smile Donc ce test représente bien les différences de performances pour un codeur débutant, mais la ligne que tu pointes ne viendrait pas à l'idée d'un codeur attentif et sachant qu'il est dans un algo critique. Cela dit, c'est un mauvais point pour GTC, oui smile

C'est difficile de faire vérifier à GTC que x et y sont constants dans la boucle ? A priori ça ne me semble pas super dur à coder (l'optimisation parcourt la boucle à la recherche d'une affectation sur x et y, et s'il n'en trouve pas alors c'est considéré comme constant et on déporte le calcul), mais le spécialiste qui pourra le dire c'est toi smile
s'il y avait eu la moindre modification de pointeur en mémoire [la transformation n'aurait pas été faite]
Le calcul [x][y] peut quand même être déporté, non ?
ou le moindre appel de fonction à l'intérieur du bloc if
Pourquoi ?
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

302

Pollux (./300) :
Accessoirement c'est illusoire de croire qu'on peut compter sur le compilateur pour faire ce genre d'optimisation à la place du programmeur : s'il y avait eu la moindre modification de pointeur en mémoire, ou le moindre appel de fonction à l'intérieur du bloc if, la transformation n'aurait pas été faite

C'est faux, si les types sont différents, GCC part du principe que le pointeur ne peut pas pointer sur le tableau (sauf l'exception que char * peut pointer sur tout). Ça s'appelle le strict aliasing, ça en a cassé, des programmes, quand ils ont introduit ça la première fois, mais c'est conforme au standard C et ça permet justement ce genre d'optimisations.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

303

Kevin Kofler (./302) :
C'est faux, si les types sont différents
Les types de quoi ?
GCC part du principe que le pointeur ne peut pas pointer sur le tableau
Quel pointeur ?
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

304

long *p;
int foo[100];
p=(long *)foo;

et ensuite utiliser *p n'est pas valide.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

305

D'ailleurs, exception à l'exception: __restrict__ spécifie que le pointeur n'aliase rien, même pas d'autres pointeurs du même type, et même si c'est du char *. restrict est un mot-clé C99, mais GCC gère l'écriture __restrict__ aussi en mode C90 + extensions GNU et en C++, cf. http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Restricted-Pointers.html.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

306

Pourquoi ce n'est pas valide ? (j'essaie de comprendre wink)
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

307

Lis l'entrée sur -fstrict-aliasing (qui est impliqué par -Os, -O2 ou -O3): http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Optimize-Options.html
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

308

return t.i; }
Dans leur exemple, quand on faitint f() {
            a_union t;
            t.d = 3.0;
    
t.i est converti en un int ? c'est comme si on marquait return (int)t.d ?
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

309

Non, ça lit la représentation interne du double en un int. Ou plutôt les sizeof(int) premiers octets. (Dans TIGCC, tu vas avoir l'exposant et le signe en la représentation interne dans ton int si tu fais ça.) Je déconseille fortement ce genre de hacks non portables, même avec une union.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

310

si tu veux la valeur du double dans un int, c'est :

double d; int i;
i = d;

il n'y a pas d'autres méthodes.
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

311

Merci smile Je connaissais déjà la réponse en fait, mais leur texte m'avait foutu un doute, car je ne pige pas la différence entre leurs deux codes...
C'est quoi alors qui change entre les deux exemples ?
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

312

Que l'un utilise directement l'union pour la conversion, l'autre joue avec un pointeur ce qui peut foirer à cause du strict aliasing.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

313

Ok, mais foirer comment ? Que se passe-t-il ?
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

314

Le problème d'aliasing le plus courant est qu'une écriture dans un alias n'est pas reconnue comme affectant une lecture d'un autre. Ceci justement pour permettre des optimisations comme notre fameuse invariante de boucle qui a soulevé toute cette discussion. L'invariante n'est reconnue que si soit il n'y a aucune écriture dans la boucle, soit le compilateur peut partir du principe que les écritures ailleurs dans la boucle ne changent pas notre invariante.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

315

Merci. J'intégrerai les résultats de vitesse demain après midi. J'espère qu'il ne sera pas difficile pour Pollux d'arranger le point noir qui a coulé GTC sur le test de TICon45.
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

316

Ce que tu appelles (et Pollux appelle essentiellement aussi, en paraphrasant) "point noir", moi je l'appelle défaillance fondamentale de l'optimisation. Ce n'est qu'une simple invariante de boucle à charger avant la boucle.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

317

"ce n'est que", "simple"... Quand tu auras codé un compilateur aussi complet que celui de Pollux, ça ne me choquera pas que tu emploies ces termes wink Tu parles, souvent tu critiques, mais faire un patch pour TIGCC c'est tellement plus facile que de coder de A à Z un compilateur...
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

318

319

Il ne reste plus grand chose du code initial.
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

320

GTC est une adaptation d'un compilateur existant tout comme le GCC de TIGCC.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

321

Sauf que tu as modifié beaucoup moins de code dans GCC que Pollux dans CC68 de Matthew Brandt. C'est trop facile de critiquer. Fais-en autant que Pollux et après tu seras en position crédible pour parler de "défaillance fondamentale"!
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

322

Bilan des tests :


Un défaut d'optimisation bien particulier dans GTC a complètement plombé les résultats du test des vitesses. Voici les résultats globaux :


Avec -Os : TIGCC produit des fichiers 5,4% plus gros et 2,5% plus rapides par rapport à GTC.
Avec -O2 : TIGCC produit des fichiers 23,2% plus gros et 0,5% plus rapides par rapport à GTC.
Avec -O3 : TIGCC produit des fichiers 31,7% plus gros et 0,6% plus rapides par rapport à GTC.


Qui est le vainqueur sur la globalité de ces pourcentages globaux ?
- si l'on juge primordiale la taille des programmes, GTC gagne avec une avance moyenne de 20%.
- si l'on juge primordiale la vitesse des programmes, TIGCC gagne avec une avance moyenne de 1,2%.

Il faut remarquer que la différence de taille est conséquente alors que la différence de vitesse reste raisonnable.
Le compilateur réalisant le meilleur compromis vitesse/taille est GTC.

avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

323

Je trouve ces résultats incohérents entre eux.
Pourquoi TIGCC en optimisation taille se retrouve plus rapide que TIGCC en optimisation vitesse ?
avatar

324

Les résultats ne disent pas ça. Relis bien smile
On ne compare pas les différences qu'apportent les 3 switchs sur un même compilateur.
On compare un compilateur par rapport à un autre, et on refait cette comparaison pour chaque switch.

Quand on passe d'un switch au switch supérieur, la vitesse des programmes augmente bien, ainsi que leur taille. Mais ce n'est pas ça qui nous intéresse. C'est la différence entre les deux compilateurs pour chaque switch qui est intéressante.
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

325

J'ai beau relire, je lis toujours ce qui est écrit wink

GTC n'a pas de switch, ou du moins, tu n'en indiques pas.
Ainsi, tu compares TIGCC avec différents switchs à une constante, et donc on devrait pouvoir aussi comparer les différents switchs de TIGCC entre eux, avec tes résultats.
avatar

326

Si si, GTC a des switchs smile D'ailleurs la preuve est indirectement dans les résultats bruts : les temps diminuent et les tailles augmentent quand on passe d'un switch au switch supérieur.

Je ne sais pas quelle version de GTC tu as. Celle que j'ai date du 3 octobre. Pollux y a corrigé un bug et activé la prise en compte des switchs -Ox.
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

327

Donc les switchs -Ox sont aussi appliqués à GTC ?
avatar

328

Bah wé smile
J'ai édité le post ./1 pour le rendre plus clair. Je pense que l'ambiguïté est levée à présent.
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

329

thibaut: et si a lieu de mettre des %age tu metais les valeurs ? ça parlerais bcp plus..
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

330

Les pourcentages c'est pour résumer, et c'est plus parlant que des valeurs absolues je trouve. Ca permet de se faire une idée indépendamment du temps ou de la taille. Si tu veux les valeurs elles-mêmes, elles sont dans le ./2 et le ./69.
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.