FAQ CUDA
FAQ CUDAConsultez toutes les FAQ
Nombre d'auteurs : 1, nombre de questions : 66, dernière mise à jour : 14 juin 2021
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.
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.
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.
Lien : Documentation de la STL
Lien : Documentation de Thrust