Le dernier billet de la catégorie Thèse

Bon, voilà, ceci est très probablement le dernier billet de la catégorie Thèse. La décision fut difficile à prendre, elle reste toujours un peu « là » mais c’était la meilleure, sinon la seule décision à prendre. Je ne suis plus thésarde. Je ne suis plus doctorante. Je ne serai jamais Docteur. Une page inachevée se tourne. Dommage, c’était une jolie page. Mais des fois, il faut bien que le réalisme prenne le pas sur le « joli »… Merci à tous ceux qui m’ont épaulée pendant ces quatre années. Merci à ceux qui ont compris et accepté cette décision. Et courage à ceux qui y sont encore. J’espère que vous serez plus forts que moi.

Flap flap

J’avais un problème de benchmarks. Je voulais benchmarker un truc dans ce goût là :

for(j = 0; j<16; j++)   {     c[j] = a[j] + b[j];   }

et son équivalent,

*(__m128i *) d = _mm_add_epi8( *(__m128i *) a,*(__m128i *) b);

C’est évidemment non trivial parce qu’on est très largement au-dessous de la granularité mesurable. Bourrinons donc un coup, on colle une grosse boucle autour et on mesure 30 millions d’exécutions de ce truc.

Tout se passe bien avec GCC, on a les mesures avec des gettimeofday() placés aux endroits stratégiques, roulez jeunesse. Enfin, tout se passe bien… je tombe quand même là-dessus : http://gcc.gnu.org/bugzilla/show_bug.cgi?id=26128 mais bon, c’est presque la routine.

Ça se corse avec ICC. Là, ya pas à dire, le compilo, il est pas assez con. Il voit ma boucle, il se dit « mais mais mais… ça sert à rien ce truc ! » (il a raison, hein, intrinsèquement) et donc il la vire sans autre forme de procès. Les temps d’exécution à 0.000000, c’est encourageant, mais ça fai t pas avancer la recherche.

Donc je cherche, je trifouille, je torture les options du compilo pour qu’il me sorte ma boucle, rien n’y fait. Je tente un appel de fonction, ça fout un overhead monstrueux. Je bricole ma boucle pour utiliser la variable d’induction dedans, idem, overhead monstrueux.

C’est Seb (qu’il en soit loué) qui m’a donné la solution : un petit volatile (d’où le titre du billet, pour ceux qui suivent) devant la déclaration de mon compteur est clairement une solution qui n’est pas forcément très élégante mais qui a l’avantage de faire ce que je veux avec un overhead assez réduit. Youpi 🙂

Nouvelle catégorie

Bon, j’inaugure une nouvelle catégorie sur mon blog : la catégorie « Thèse ». Ça sera probablement pas très intéressant pour personne à part moi – z’avez le droit de sauter.

Je viens donc de passer le cap des 100 pages pour le rapport autoproclamé « Rapport le plus ch…. de l’histoire de la recherche » – un rapport de benchs plein de courbes comme celle que j’ai passée il y a quelques jours et de tableaux de chiffres dans tous les sens. Ah, et pas mal de code assembleur, aussi.