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

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
