128 bits entier sur cuda?
J'ai juste réussi à installer mon cuda SDK sous Linux Ubuntu 10.04. Ma carte graphique est une NVIDIA geForce GT 425M, et j'aimerais l'utiliser pour certains gros problème de calcul.
Ce que je me demande est: est-il possible d'utiliser certains unsigned 128 bits int var? Lors de l'utilisation de gcc pour exécuter mon programme sur le PROCESSEUR, j'ai été en utilisant l' __uint128_t type, mais de l'utiliser avec cuda ne semble pas fonctionner.
Est-ce que je peux faire pour avoir de 128 bits entiers sur cuda?
Merci beaucoup
Matteo Monti
Msoft Programmation
Vous devez vous connecter pour publier un commentaire.
Pour de meilleures performances, on voudrait carte de 128 bits type sur le dessus de CUDA type de vecteur, comme uint4, et de mettre en œuvre la fonctionnalité en utilisant PTX assembly en ligne. Le plus ressemblerait à quelque chose comme ceci:
La multiplication peut également être construit à l'aide de PTX assembly en ligne par la rupture de la 128 bits en 32 bits morceaux, le calcul de l'64 bits partielle des produits et de l'ajout de façon appropriée. Évidemment, cela prend un peu de travail. On peut obtenir des performances acceptables au niveau C en brisant le nombre en 64 bits morceaux et de l'aide __umul64hi() en conjonction avec d'régulière 64 bits de multiplication et de quelques ajouts. Ce résultat suivant:
Ci-dessous est une version de la 128 bits de multiplication qui utilise PTX assembly en ligne. Il nécessite PTX 3.0, qui est fourni avec CUDA 4.2, et le code exige un GPU avec au moins calculer la capacité de 2.0, c'est à dire un Fermi ou Kepler de la classe de l'appareil. Le code utilise le nombre minimal d'instructions, comme seize 32 bits multiplie sont nécessaires pour mettre en œuvre un cryptage de 128 bits de multiplication. Par comparaison, la variante ci-dessus à l'aide de CUDA intrinsèques compile à 23 instructions pour une sm_20 cible.
XMAD
(16x16+32 bit multiply-add opération). J' lire que les indiens d'entier de 32 bits multiplie ont été restaurés avec de la Volta architecture , mais je n'ai pas de mains sur l'expérience avec Volta encore.CUDA ne prend pas en charge 128 bits entiers en mode natif. Vous pouvez le faux opérations vous-même à l'aide de deux entiers 64 bits.
Regarder ce post:
my_uint128
sur le CPU? Bien sûr, la prise en charge native sera plus rapide. L'espoir est que les performances sur le GPU avec cette 128 bits type sera plus rapide que la performance sur le CPU avec construit-dans 128 bits entiers.Une réponse tardive, mais vous pouvez envisager d'utiliser cette bibliothèque:
https://github.com/curtisseizert/CUDA-uint128
qui définit un cryptage de 128 bits, la taille de la structure, avec des méthodes et autonome les fonctions de l'utilitaire pour l'obtenir à fonction comme prévu, ce qui lui permet d'être utilisé comme un entier. La plupart du temps.