| 예 | Godbolt | 선적 서류 비치 |
|---|
NVIDIA C ++ 표준 라이브러리 인 LIBCU ++는 전체 시스템의 C ++ 표준 라이브러리입니다. CPU 및 GPU 코드 사이에 사용될 수있는 C ++ 표준 라이브러리의 이기종 구현을 제공합니다.
C ++ 표준 라이브러리를 사용하는 방법을 알고 있다면 libcu ++를 사용하는 방법을 알고 있습니다. 표준 라이브러리의 시작에 cuda/std/ 추가하기 만하면 cuda:: std:: ::
# include < cuda/std/atomic >
cuda::std::atomic< int > x;NVIDIA C ++ 표준 라이브러리는 오픈 소스 프로젝트입니다. GitHub에서 사용할 수 있으며 NVIDIA HPC SDK 및 CUDA 툴킷에 포함되어 있습니다. 해당 SDK 중 하나가 설치된 경우 LIBCU ++를 사용하기 위해 추가 설치 또는 컴파일러 플래그가 필요하지 않습니다.
cuda:: 및 cuda::std::NVCC와 함께 사용될 때 NVIDIA C ++ 표준 라이브러리 시설은 호스트 컴파일러의 표준 라이브러리와 동일한 구조와 동일한 구조를 가진 자체 헤더 계층 및 네임 스페이스에 살고 있습니다.
std:: / <*> : NVCC를 사용할 때는 __host__ 코드 --expt-relaxed-constexpr constexpr 기능을 사용하여 __device__ 코드를 사용하여 __host__ 코드에서만 작동하는 호스트 컴파일러의 표준 라이브러리입니다. NVCC를 사용하면 LIBCU ++는 호스트 컴파일러의 표준 라이브러리를 교체하거나 방해하지 않습니다.cuda::std:: / <cuda/std/*> : __host__ __device__ 코드에서 작동하는 표준 라이브러리에서 시설의 구현을 엄격하게 부여합니다.cuda:: / <cuda/*> : __host__ __device__ 코드에서 작동하는 표준 라이브러리에 대한 확장을 준수합니다.cuda::device / <cuda/device/*> : __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; NVIDIA C ++ 표준 라이브러리는 호스트 및 장치 코드에서 전체 코드베이스에서 작동합니다. LIBCU ++는 CPU 또는 GPU뿐만 아니라 전체 시스템을위한 C ++ 표준 라이브러리입니다. cuda:: 의 모든 것은 __host__ __device__ 입니다.
LIBCU ++ 시설은 호스트와 장치 코드 사이에 전달되도록 설계되었습니다. 달리 명시되지 않는 한, 복사 가능 또는 이동식 인 LIBCU ++ 객체는 호스트와 장치 코드간에 복사하거나 이동할 수 있습니다.
동기화 객체는 호스트 및 장치 코드에서 작동하며 호스트와 장치 스레드간에 동기화하는 데 사용될 수 있습니다. 그러나 알아야 할 몇 가지 제한이 있습니다. 자세한 내용은 Synchronization Primitives 섹션을 참조하십시오.
cuda::device::소수의 LIBCU ++ 시설은 장치 코드에서만 작동합니다. 일반적으로 호스트 코드에는 현명한 구현이 없기 때문입니다.
그러한 시설은 cuda::device:: 에 산다.
오늘날 NVIDIA C ++ 표준 라이브러리는 오늘날 C ++ 표준 라이브러리의 우선 순위가 높은 부분 집합을 제공하며 각 릴리스는 기능 세트를 증가시킵니다. 그러나 그것은 하위 집합입니다. 오늘날 모든 것을 사용할 수있는 것은 아닙니다. 표준 API 섹션에는 사용 가능한 시설과 처음 도입 된 릴리스가 나와 있습니다.
NVIDIA C ++ 표준 라이브러리는 GitHub에서 개발 된 오픈 소스 프로젝트입니다. NVIDIA의 LLVM LIBC ++ 변형입니다. LIBCU ++는 LLVM 예외가있는 Apache 라이센스 v2.0에 따라 배포됩니다.
NVIDIA C ++ 표준 라이브러리는 C ++ 표준, ISO/IEC IS 14882, 16 내지 32 절을 준수하는 것을 목표로합니다.
NVIDIA C ++ 표준 라이브러리는 장기 ABI 안정성을 유지하지 않습니다. 유망한 장기 ABI 안정성은 우리가 실수를 고치고 수업 공연에서 최선을 다하는 것을 방해 할 수 있습니다. 그래서 우리는 그러한 약속을하지 않습니다.
모든 주요 CUDA 툴킷 릴리스에서 ABI가 깨질 것입니다. ABI 버전의 수명주기는 약 1 년입니다. ABI 버전에 대한 장기 지원은 약 2 년 후에 종료됩니다. 자세한 내용은 버전 섹션을 참조하십시오.
최신 NVIDIA SDK와 함께 코드와 종속성을 다시 컴파일하고 최신 NVIDIA C ++ 표준 라이브러리 ABI를 사용하는 것이 좋습니다. 머리에 산다.