New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Résultats incohérents avec GCC > 5 #2
Comments
En utilisant cette manière de calculer le total :
Voici la sortie sous GCC 5 :
Sous GCC 6 :
Et... sous GCC 7 :
Pour rappel, voici la sortie du programme original compilé à l'aide de GCC 7 :
|
La correction de ce bug a été de passer le monoïde par valeur (avec une copie) plutôt que par référence. En effet, il peut s'agir d'un problème de synchronisation (la valeur est modifiée autre part) ou d'optimisation, introduit dans GCC 6. Ceci induit donc des copies supplémentaires et augmente le temps de calcul total d'environ 5 %. S'agissant probablement d'un bug de GCC ou de Cilk, l'objectif est de circonscrire le problème sur un exemple simple afin de le soumettre au bugtracker de GCC par exemple. |
Dans le cadre de mon TER (travail d'étude et de recherche), je dois distribuer le calcul effectué par
NumericMonoid
sur plusieurs machines. C'est codé en Go et fait appel à des bindings Go <-> C/C++ afin d'appeler le code original optimisé et laisser la partie distribution à un langage plus haut niveau. Le dépôt est ici.En mettant en place des tests unitaires, j'ai remarqué que les résultats renvoyés étaient incohérents. Voici ce qui se passe quand on compile avec GCC 5 :
Par contre, avec GCC 6 :
Les résultats semblent aléatoires et il est intéressant de constater que le temps de calcul est fortement réduit. À noter que le problème ne se pose pas lorsque l'on passe
-n 1
en argument.J'ai pris le temps de tester à l'aide de GCC 7 (7.0.1 20170307), on obtient le même comportement.
objdump_treewalk_gcc5.txt
objdump_treewalk_gcc6.txt
perf_data_treewalk_gcc5.txt
perf_data_treewalk_gcc6.txt
CC @hivert @jfromentin
The text was updated successfully, but these errors were encountered: