| Exemples | Godbolt | Documentation |
|---|
Libcu ++, la bibliothèque standard NVIDIA C ++, est la bibliothèque standard C ++ de l'ensemble de votre système. Il fournit une implémentation hétérogène de la bibliothèque standard C ++ qui peut être utilisée dans et entre le CPU et le code GPU.
Si vous savez comment utiliser votre bibliothèque standard C ++, vous savez utiliser Libcu ++. Tout ce que vous avez à faire est d'ajouter cuda/std/ au début de votre bibliothèque standard inclut et cuda:: avant toute utilisation de std::
# include < cuda/std/atomic >
cuda::std::atomic< int > x;La bibliothèque standard NVIDIA C ++ est un projet open source; Il est disponible sur GitHub et inclus dans le SDK NVIDIA HPC et la boîte à outils CUDA. Si un de ces SDK est installé, aucune installation ou indicateur de compilateur supplémentaire n'est nécessaire pour utiliser libcu ++.
cuda:: et cuda::std::Lorsqu'il est utilisé avec NVCC, les installations de bibliothèque standard NVIDIA C ++ vivent dans leur propre hiérarchie et espace de noms avec la même structure que, mais distincte de la bibliothèque standard du compilateur hôte:
std:: / <*> : Lorsque vous utilisez NVCC, il s'agit de la bibliothèque standard de votre compilateur hôte qui fonctionne uniquement dans le code __host__ , bien que vous puissiez utiliser l'indicateur --expt-relaxed-constexpr pour utiliser toutes les fonctions constexpr dans le code __device__ . Avec NVCC, LiBCU ++ ne remplace pas ou ne s'interfére pas avec la bibliothèque standard du compilateur hôte.cuda::std:: / <cuda/std/*> : Implémentations strictement conformes des installations de la bibliothèque standard qui fonctionnent dans le code __host__ __device__ .cuda:: / <cuda/*> : Conformer les extensions à la bibliothèque standard qui fonctionnent dans le code __host__ __device__ .cuda::device / <cuda/device/*> : Conformer les extensions à la bibliothèque standard qui ne fonctionne que dans le code __device__ . // Standard C++, __host__ only.
# include < atomic >
std::atomic< int > x;
// CUDA C++, __host__ __device__.
// Strictly conforming to the C++ Standard.
# include < cuda/std/atomic >
cuda::std::atomic< int > x;
// CUDA C++, __host__ __device__.
// Conforming extensions to the C++ Standard.
# include < cuda/atomic >
cuda::atomic< int , cuda::thread_scope_block> x; La bibliothèque standard NVIDIA C ++ fonctionne sur toute votre base de code, à la fois dans et entre l'hôte et le code de périphérique. Libcu ++ est une bibliothèque standard C ++ pour l'ensemble de votre système, pas seulement votre CPU ou votre GPU. Tout en cuda:: est __host__ __device__ .
Les installations LiBCU ++ sont conçues pour être réalisées entre l'hôte et le code de périphérique. Sauf indication contraire, tout objet LiBCU ++ qui est copyable ou mobile peut être copié ou déplacé entre l'hôte et le code de périphérique.
Les objets de synchronisation fonctionnent sur l'hôte et le code de périphérique et peuvent être utilisés pour synchroniser entre les threads hôte et périphérique. Cependant, il existe des restrictions à connaître; Veuillez consulter la section primitives de synchronisation pour plus de détails.
cuda::device::Un petit nombre d'installations LibCU ++ ne fonctionnent que dans le code de l'appareil, généralement parce qu'il n'y a pas d'implémentation raisonnable dans le code hôte.
Ces installations vivent à cuda::device:: .
Aujourd'hui, la bibliothèque standard NVIDIA C ++ offre un sous-ensemble de grande priorité de la bibliothèque standard C ++ aujourd'hui, et chaque version augmente l'ensemble de fonctionnalités. Mais c'est un sous-ensemble; Tout n'est pas disponible aujourd'hui. La section API standard répertorie les installations disponibles et les sorties dans lesquelles ils ont été introduits pour la première fois.
La bibliothèque standard NVIDIA C ++ est un projet open source développé sur GitHub. Il s'agit de la variante de Nvidia de LLVM LIBC ++. LIBCU ++ est distribué sous la licence Apache V2.0 avec des exceptions LLVM.
La bibliothèque standard NVIDIA C ++ vise à être une implémentation conforme de la norme C ++, ISO / IEC est 14882, clause 16 à 32.
La bibliothèque standard NVIDIA C ++ ne maintient pas la stabilité ABI à long terme. La stabilité à long terme de l'ABI promettrait de réparer les erreurs et de fournir les meilleures performances en classe. Donc, nous ne faisons pas de telles promesses.
Chaque version majeure de la boîte à outils CUDA, l'ABI sera brisée. Le cycle de vie d'une version ABI est d'environ un an. Le support à long terme pour une version ABI se termine après environ deux ans. Veuillez consulter la section de versioning pour plus de détails.
Nous vous recommandons de recompiler toujours votre code et vos dépendances avec les derniers SDK NVIDIA et d'utiliser la dernière bibliothèque standard NVIDIA C ++ ABI. Vivre à la tête.