Dot-product CUDA, résultats incorrects [Résolu]

Signaler
Messages postés
557
Date d'inscription
dimanche 25 septembre 2005
Statut
Membre
Dernière intervention
10 mai 2014
-
Messages postés
557
Date d'inscription
dimanche 25 septembre 2005
Statut
Membre
Dernière intervention
10 mai 2014
-
Bonjour,

J'ai développé un début de bibliothèque Mathématique Python (plutôt à titre de tests pour le moment) mais je bute sur un problème étrange.

Le code est disponible ici : https://github.com/dubzzz/cuda-mathmodule-for-python

Mon script de tests semble fonctionner parfaitement pour des vecteurs de tailles conséquentes (>256) mais peut renvoyer des résultats incohérents pour de petits tableaux (10 par exemple). Bien qu'ayant essayé de trouver d'où provenait exactement le problème, je suis toujours dans l'incapacité de trouver un fix permettant de le résoudre.

Merci d'avance pour vos réponse.
Bien cordialement,
Nicolas DUBIEN

5 réponses

Messages postés
14870
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
30 mai 2020
413
Déplacé vers la catégorie Python
Messages postés
557
Date d'inscription
dimanche 25 septembre 2005
Statut
Membre
Dernière intervention
10 mai 2014
2
Euhh, CUDA c'est en C/C++.
Le bug est côté C/C++ et non Python, merci de le remettre dans la bonne catégorie.
Messages postés
14870
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
30 mai 2020
413
Au temps pour moi, un autre modo qui passait par là s'en est chargé.
Messages postés
557
Date d'inscription
dimanche 25 septembre 2005
Statut
Membre
Dernière intervention
10 mai 2014
2
Pas de problèmes, j'aurais pu être plus précis et mettre plus explicitement C/C++ ^^
Messages postés
557
Date d'inscription
dimanche 25 septembre 2005
Statut
Membre
Dernière intervention
10 mai 2014
2
Je crois avoir trouvé la raison de mon problème.

Lors d'un produit vectoriel avec moins de MAX_THREADS membres, je faisais un return pour ceux qui ne nécessitaient pas de traitement particulier (en dehors des bornes) et un __syncthreads() pour les autres.
Dans les deux cas, je procédais à une initialisation du cache. Cependant contrairement à ce que je pouvais penser __syncthreads() n'attendait pas l'appel à return, d'où le problème de valeur évoqué.