| Exemplos | Godbolt | Documentação |
|---|
Libcu ++, a biblioteca padrão NVIDIA C ++, é a biblioteca padrão C ++ para todo o seu sistema. Ele fornece uma implementação heterogênea da biblioteca padrão C ++ que pode ser usada em e entre CPU e código GPU.
Se você sabe como usar sua biblioteca padrão C ++, sabe como usar o libcu ++. Tudo o que você precisa fazer é adicionar cuda/std/ ao início da sua biblioteca padrão inclui e cuda:: Antes de qualquer uso de std::
# include < cuda/std/atomic >
cuda::std::atomic< int > x;A biblioteca padrão NVIDIA C ++ é um projeto de código aberto; Está disponível no GitHub e incluído no NVIDIA HPC SDK e CUDA Toolkit. Se você tiver um desses SDKs instalados, não são necessários sinalizadores de instalação ou compilador adicionais para usar o libcu ++.
cuda:: e cuda::std::Quando usado com o NVCC, as instalações da biblioteca padrão da NVIDIA C ++ vivem em sua própria hierarquia de cabeçalho e espaço para nome com a mesma estrutura que, mas distintos da biblioteca padrão do compilador host:
std:: / <*> : Ao usar o NVCC, este é o seu host Standard's Standard Library que funciona apenas no código __host__ , embora você possa usar o sinalizador --expt-relaxed-constexpr para usar quaisquer funções constexpr no código __device__ . Com o NVCC, o libcu ++ não substitui ou interfere na biblioteca padrão do compilador host.cuda::std:: / <cuda/std/*> : implementações estritamente em conformidade das instalações da biblioteca padrão que funcionam no código __host__ __device__ .cuda:: / <cuda/*> : Extensões em conformidade com a biblioteca padrão que funciona no código __host__ __device__ .cuda::device / <cuda/device/*> : Extensões em conformidade com a biblioteca padrão que funciona apenas no código __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; A biblioteca padrão NVIDIA C ++ funciona em toda a sua base de código, dentro e através do código de host e dispositivo. O LIBCU ++ é uma biblioteca padrão C ++ para todo o seu sistema, não apenas sua CPU ou GPU. Tudo em cuda:: é __host__ __device__ .
As instalações LibCU ++ foram projetadas para serem passadas entre o host e o código do dispositivo. Salvo indicação em contrário, qualquer objeto LIBCU ++ copiado ou móvel pode ser copiado ou movido entre o host e o código do dispositivo.
Os objetos de sincronização funcionam no código do host e do dispositivo e podem ser usados para sincronizar entre os threads de host e dispositivo. No entanto, existem algumas restrições a serem cientes; Consulte a seção Primitives de sincronização para obter mais detalhes.
cuda::device::Um pequeno número de instalações LIBCU ++ funciona apenas no código do dispositivo, geralmente porque não há implementação sensata no código do host.
Tais instalações vivem em cuda::device:: .
Hoje, a biblioteca padrão NVIDIA C ++ fornece um subconjunto de alta prioridade da biblioteca padrão C ++ hoje e cada versão aumenta o conjunto de recursos. Mas é um subconjunto; Nem tudo está disponível hoje. A seção API padrão lista as instalações disponíveis e os lançamentos em que foram introduzidos pela primeira vez.
A biblioteca padrão NVIDIA C ++ é um projeto de código aberto desenvolvido no GitHub. É a variante da NVIDIA do LIBC ++ da LLVM. O LIBCU ++ é distribuído sob a licença Apache v2.0 com exceções de LLVM.
A biblioteca padrão NVIDIA C ++ visa ser uma implementação em conformidade do padrão C ++, ISO/IEC é 14882, cláusula 16 a 32.
A biblioteca padrão NVIDIA C ++ não mantém a estabilidade de ABI a longo prazo. A estabilidade promissora de ABI a longo prazo nos impediria de corrigir erros e proporcionar o melhor desempenho em classe. Então, não fazemos tais promessas.
Cada grande lançamento do CUDA Toolkit, o ABI será quebrado. O ciclo de vida de uma versão da ABI é de aproximadamente um ano. O suporte de longo prazo para uma versão da ABI termina após aproximadamente dois anos. Consulte a seção de versão para obter mais detalhes.
Recomendamos que você sempre recomponha seu código e dependências com os mais recentes SDKs NVIDIA e use a mais recente biblioteca padrão NVIDIA C ++. Viva na cabeça.