| Beispiele | Godbolt | Dokumentation |
|---|
LIBCU ++, die NVIDIA C ++ Standardbibliothek, ist die C ++ - Standardbibliothek für Ihr gesamtes System. Es bietet eine heterogene Implementierung der C ++ - Standardbibliothek, die in und zwischen CPU- und GPU -Code verwendet werden kann.
Wenn Sie wissen, wie Sie Ihre C ++ - Standardbibliothek verwenden, wissen Sie, wie Sie LIBCU ++ verwenden. Alles, was Sie tun müssen, ist cuda/std/ zu Beginn Ihrer Standardbibliothek hinzuzufügen und cuda:: vor der Verwendung von std::
# include < cuda/std/atomic >
cuda::std::atomic< int > x;Die NVIDIA C ++ Standardbibliothek ist ein Open -Source -Projekt. Es ist auf GitHub erhältlich und im NVIDIA HPC SDK und CUDA Toolkit enthalten. Wenn Sie eines dieser SDKs installiert haben, sind keine zusätzlichen Installations- oder Compiler -Flags erforderlich, um LIBCU ++ zu verwenden.
cuda:: und cuda::std::Bei Verwendung mit NVCC leben die NVIDIA C ++ - Standardbibliothekseinrichtungen in ihrer eigenen Header -Hierarchie und Namespace mit der gleichen Struktur wie, aber unterscheidet sich von der Standardbibliothek des Host Compiler:
std:: / <*> : Bei der Verwendung von NVCC ist dies die Standardbibliothek Ihres Host-Compilers, die nur in __host__ Code funktioniert, obwohl Sie das --expt-relaxed-constexpr Flag verwenden können, um constexpr Funktionen in __device__ Code zu verwenden. Mit NVCC ersetzt oder stört LIBCU ++ die Standardbibliothek des Host Compiler nicht.cuda::std:: / <cuda/std/*> : Strikt entsprechende Implementierungen von Einrichtungen aus der Standardbibliothek, die in __host__ __device__ Code arbeiten.cuda:: / <cuda/*> : Übereinstimmung mit der Standardbibliothek, die in __host__ __device__ Code funktioniert.cuda::device / <cuda/device/*> : Konformen der Standardbibliothek, die nur in __device__ -Code funktioniert. // 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; Die NVIDIA C ++ Standardbibliothek funktioniert in Ihrer gesamten Codebasis sowohl in als auch in den Host- und Gerätecode. LIBCU ++ ist eine C ++ - Standardbibliothek für Ihr gesamtes System, nicht nur für Ihre CPU oder GPU. Alles in cuda:: ist __host__ __device__ .
LIBCU ++ -Artile sind so konzipiert, dass sie zwischen Host- und Gerätescode übergeben werden. Sofern nicht anders angegeben, kann ein libCu ++ - Objekt, das kopierbar oder beweglich ist, kopiert oder zwischen Host- und Gerätecode verschoben werden.
Synchronisationsobjekte funktionieren über Host- und Gerätecode und können verwendet werden, um zwischen Host- und Gerätethreads zu synchronisieren. Es gibt jedoch einige Beschränkungen, die sich bewusst sind. Weitere Informationen finden Sie im Abschnitt Synchronisation Primitive.
cuda::device::Eine kleine Anzahl von LIBCU ++ -Funktionen funktionieren nur im Gerätecode, normalerweise weil es keine vernünftige Implementierung im Hostcode gibt.
Solche Einrichtungen leben in cuda::device:: .
Heute liefert die NVIDIA C ++ Standardbibliothek heute eine Untergruppe mit hoher Priorität in der C ++-Standardbibliothek, und jede Version erhöht den Feature-Satz. Aber es ist eine Untergruppe; Heute ist nicht alles verfügbar. Der Standard -API -Abschnitt listet die verfügbaren Einrichtungen und die Veröffentlichungen auf, in denen sie erstmals eingeführt wurden.
Die NVIDIA C ++ Standardbibliothek ist ein Open -Source -Projekt, das auf GitHub entwickelt wurde. Es ist die Nvidia -Variante von LLVMs LIBC ++. LIBCU ++ wird unter der Apache -Lizenz v2.0 mit LLVM -Ausnahmen verteilt.
Die NVIDIA C ++ - Standardbibliothek zielt darauf ab, eine konforme Implementierung des C ++ - Standards zu sein. ISO/IEC beträgt 14882, Klausel 16 bis 32.
Die NVIDIA C ++ Standardbibliothek hält keine langfristige Abi-Stabilität. Eine vielversprechende langfristige ABI-Stabilität würde uns daran hindern, Fehler zu reparieren und die beste Leistungsfähigkeit zu bieten. Wir machen also keine solchen Versprechen.
Jede große Cuda -Toolkit -Version, die ABI, wird kaputt sein. Der Lebenszyklus einer ABI -Version beträgt ungefähr ein Jahr. Die langfristige Unterstützung für eine ABI-Version endet nach ungefähr zwei Jahren. Weitere Informationen finden Sie im Abschnitt "Versioning".
Wir empfehlen Ihnen, Ihren Code und Ihre Abhängigkeiten immer mit den neuesten NVIDIA -SDKs zu kompilieren und die neueste NVIDIA C ++ - Standard -Bibliothek ABI zu verwenden. Lebe am Kopf.