IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

FAQ CUDA

FAQ CUDAConsultez toutes les FAQ

Nombre d'auteurs : 1, nombre de questions : 66, dernière mise à jour : 14 juin 2021 

 
OuvrirSommaireCUDALibrairiesThrust

Il s'agit d'une adaptation de la STL à CUDA. En effet, Thrust propose la grande majorité des algorithmes et des types disponibles dans la STL, sans changer leur nom. Passer du CPU au GPU est plus qu'aisé : seuls les noms des types changent par rapport à la STL ! Ce qui fait que vous devez bien connaître la STL pour pouvoir bien connaître Thrust.

Thrust est orienté vers la simplicité d'usage avant les performances, mais quelques astuces permettent d'obtenir aisément des kernels très optimisés.

Thrust ne doit pas être compilé : il s'agit d'une librairie inline, elle n'est constituée d'aucun fichier source. Toutes les fonctions sont définies comme inline, c'est-à-dire qu'elles sont étendues à la compilation.

Créé le 3 août 2009  par Thibaut Cuvelier

Lien : Site officiel

Il s'agit d'un type de conteneur, hérité de la STL. Un vecteur stocke un tableau. Ces conteneurs peuvent être utilisés de la même manière que les vecteurs de la STL : vous pouvez même utiliser les algorithmes de la STL sur un vecteur Thrust.

Existent deux types de vecteurs Thrust : host_vector et device_vector. Le premier est réservé aux vecteurs stockés sur l'hôte. Le second, au vecteurs stockés sur le périphérique.

Si vous modifiez un vecteur sur le périphérique, celui-ci sera d'abord rapatrié sur l'hôte, puis modifié, enfin réinjecté dans le périphérique. Ceci est très coûteux en temps, et doit être évité au maximum.

Les host_vector sont définis dans le fichier d'en-tête thrust/host_vector.h.
Les device_vector sont définis dans le fichier d'en-tête thrust/device_vector.h.

Pour le moment, Thrust propose uniquement ce type de conteneur.

Créé le 3 août 2009  par Thibaut Cuvelier

Les algorithmes de Thrust sont parfaitement identiques quant à leur nom et à leurs paramètes aux algorithmes de la STL. Thrust ajoute aussi d'autres algorithmes.

Voici les différent algorithmes supportés ainsi que l'en-tête où ils sont définis.

Algorithme (Thrust et STL) En-tête
adjacent_difference thrust/adjacent_difference.h
count thrust/count.h
distance thrust/distance.h
equal thrust/equal.h
fill thrust/fill.h
for_each thrust/for_each.h
generate thrust/generate.h
inner_product thrust/inner_product.h
is_sorted thrust/is_sorted.h
partition thrust/partition.h
STL : accumulate
Thrust : reduce
thrust/reduce.h
remove thrust/remove.h
replace thrust/replace.h
STL : partial_sum
Thrust : incluse_scan et exclusive_scan
thrust/scan.h
STL : iota
Thrust : sequence
thrust/sequence.h
sort thrust/sort.h
swap_ranges thrust/swap_ranges.h
transform thrust/transform.h
uninitialized_copy thrust/uninitialized_copy.h
uninitialized_fill thrust/uninitialized_fill.h
unique thrust/unique.h
STL : min_element et max_element
Thrust : extrema
thrust/extrema.h

Voici les algorithmes de copie disponibles au sein de Thrust.

Copie En-tête
copy thrust/copy.h
gather thrust/gather.h
scatter thrust/scatter.h

Voici les algorithmes dont Thrust dispose, mais qui ne sont pas disponibles dans la STL.

Algorithme En-tête
transform_reduce thrust/transform_reduce.h
transform_scan thrust/transform_scan.h

Pour plus d'informations, consultez les documentations.

Créé le 3 août 2009  par Thibaut Cuvelier

Lien : Documentation de la STL
Lien : Documentation de Thrust

Copyright © 2009 Thibaut Cuvelier. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.