| Ejemplos | Mochila | Documentación |
|---|
LibCu ++, la biblioteca estándar NVIDIA C ++, es la biblioteca estándar C ++ para todo su sistema. Proporciona una implementación heterogénea de la biblioteca estándar C ++ que se puede usar en y entre CPU y código GPU.
Si sabe cómo usar su biblioteca estándar C ++, entonces sabe cómo usar libcu ++. Todo lo que tiene que hacer es agregar cuda/std/ al inicio de su biblioteca estándar incluye y cuda:: antes de cualquier uso de std::
# include < cuda/std/atomic >
cuda::std::atomic< int > x;La biblioteca estándar NVIDIA C ++ es un proyecto de código abierto; Está disponible en GitHub e incluido en el kit de herramientas NVIDIA HPC SDK y CUDA. Si tiene uno de esos SDK instalados, no se necesitan instalaciones adicionales o indicadores de compiladores para usar libcu ++.
cuda:: y cuda::std::Cuando se usa con NVCC, las instalaciones de la biblioteca estándar NVIDIA C ++ viven en su propia jerarquía de encabezado y espacio de nombres con la misma estructura que, pero distinta de la biblioteca estándar del compilador host:
std:: / <*> : cuando se usa NVCC, esta es la biblioteca estándar de su compilador host que funciona solo en código __host__ , aunque puede usar la bandera --expt-relaxed-constexpr para usar cualquier función constexpr en el código __device__ . Con NVCC, LibCu ++ no reemplaza ni interfiere con la biblioteca estándar del compilador host.cuda::std:: / <cuda/std/*> : implementaciones estrictamente conformes de instalaciones de la biblioteca estándar que funcionan en el código __host__ __device__ .cuda:: / <cuda/*> : Extensiones conformes a la biblioteca estándar que funcionan en el código __host__ __device__ .cuda::device / <cuda/device/*> : extensiones conformes a la biblioteca estándar que solo funcionan en el 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; La biblioteca estándar NVIDIA C ++ funciona en toda su base de código, tanto en el código de host como de dispositivo. LibCu ++ es una biblioteca estándar C ++ para todo su sistema, no solo su CPU o GPU. Todo en cuda:: es __host__ __device__ .
Las instalaciones de LibCu ++ están diseñadas para pasarse entre el host y el código de dispositivo. A menos que se indique lo contrario, cualquier objeto libcu ++ que sea copiado o móvil se puede copiar o mover entre el host y el código de dispositivo.
Los objetos de sincronización funcionan a través del código de host y de dispositivo, y se pueden usar para sincronizar entre hostes y hilos de dispositivo. Sin embargo, hay algunas restricciones a tener en cuenta; Consulte la sección de primitivas de sincronización para obtener más detalles.
cuda::device::Un pequeño número de instalaciones de libcu ++ solo funciona en el código del dispositivo, generalmente porque no hay una implementación sensata en el código de host.
Tales instalaciones viven en cuda::device:: .
Hoy, la biblioteca estándar NVIDIA C ++ ofrece un subconjunto de alta prioridad de la biblioteca estándar C ++ hoy, y cada lanzamiento aumenta el conjunto de características. Pero es un subconjunto; No todo está disponible hoy. La sección de API estándar enumera las instalaciones disponibles y las versiones en las que se introdujeron por primera vez.
La biblioteca estándar NVIDIA C ++ es un proyecto de código abierto desarrollado en GitHub. Es la variante de NVIDIA de LIBC ++ de LLVM. LibCu ++ se distribuye bajo la licencia Apache v2.0 con excepciones LLVM.
La biblioteca estándar NVIDIA C ++ tiene como objetivo ser una implementación conforme del estándar C ++, ISO/IEC es 14882, cláusula 16 a 32.
La biblioteca estándar NVIDIA C ++ no mantiene la estabilidad ABI a largo plazo. La prometedora estabilidad de ABI a largo plazo nos impediría arreglar errores y proporcionar el mejor rendimiento en la clase. Entonces, no hacemos tales promesas.
Todos los principales lanzamientos de Cuda Toolkit, el ABI se romperá. El ciclo de vida de una versión ABI es de aproximadamente un año. El soporte a largo plazo para una versión ABI termina después de aproximadamente dos años. Consulte la sección de versiones para obtener más detalles.
Le recomendamos que siempre recompire su código y dependencias con los últimos SDK de NVIDIA y use la última biblioteca estándar NVIDIA C ++ ABI. Vivir en la cabeza.