Différents résultats pour le même calcul sur CPU et GPU.
Bonjour, je travaille sur ma propre librarie de réseaux de neurones et en ce moment j'essaye de copier mon code CPU sur GPU (l'utilisateur aurait de choix d'utiliser le GPU ou non).
J'ai réussi à faire fonctionner mon code sur GPU.
Sur des petits réseaux (avec peu de calcul), ça fonctionne bien mais sur beaucoup de calculs, environ 1 fois sur 2 le résultat n'est pas exact (je tire des valeurs initiales random au début).
par exemples :
Code:
1 2 3
| 0.3387047350406646728515625 != 0.33870494365692138671875
0.14186990261077880859375!= 0.141869843006134033203125 |
Dans cette exemple j'effectue 775 mutiplications et 56 additions sur des float et le résultat GPU et CPU est légèrement différent.
Auriez-vous une idée d'où peut venir cette erreur de calcul ? Es-ce normal ou es-ce de ma faute ?
Je ne pense pas que ça vienne de mon algo sinon les résultats serait significativement différent.
Es-ce que ça pourrait venir d'un truc du genre 0.5f au lieu de 0.5 et du coup il y a certain calcul qui serait fait en double sur l'un et en float sur l'autre ?
Es-ce que x1 et x2 fournissent toujour le même résultat ?
Code:
1 2
| float x1 = 0.125 * 0.587;
float x2 = 0.125f * 0.587f; |
PS : Mon code est beaucoup trop gros pour vous le montrer ici.