Libcu++:NVIDIA C++标准库

2020-09-19 18:04:24

Libcu++,NVIDIA C++标准库,是整个系统的C++标准库,它提供了C++标准库的异构实现,可以在CPU和GPU代码之间使用。

如果您知道如何使用C++标准库,那么您就知道如何使用elibcu++。在使用任何std:之前,您需要做的就是将cuda/std/添加到Standard LibraryIncludes和Cuda::的开头。

NVIDIA C++标准库是一个开源项目;它在GitHub上提供,包含在NVIDIA HPC SDK和CUDA工具包中。不需要额外的安装或编译器标志。

当与NVCC一起使用时,NVIDIA C++标准库工具位于它们自己的标题层次结构和命名空间中,其结构与主机编译器的标准库相同,但不同:

Std::/<;*>;:您的主机编译器标准库仅在__host__代码中工作。使用NVCC时,libcu++不会替换或干扰主机编译器标准库。

//Standard C++,__host__only。#include<;atom>;std::atom<;int>;x;//CUDA C++,__host_device__。//严格遵循C++标准。#include<;cuda/std/atom>;cuda::std::atom<;int>;x;//CUDA C++,__HOST_DEVICE__。//符合C++标准的扩展。#include<;cuda/std/atom>;cuda::atom<;int,cuda::thread_scope_block>;x;

NVIDIA C++标准库适用于您的整个代码库,包括主机和设备代码。libcu++是适用于整个系统的C++标准库,而不仅仅是CUDA::IS__HOST_DEVICE__。

Libcu++工具设计用于在主机和设备代码之间传递,除非另有说明,否则任何可复制或可移动的libcu++对象都可以在主机和设备代码之间复制或移动。

同步对象跨主机和设备代码工作,可用于在主机和设备线程之间进行同步。但是,需要注意一些限制;有关详细信息,请参阅同步库部分。

少数libcu++工具只能在设备代码中工作,通常是因为在主机代码中没有合理的实现。

今天,NVIDIA C++标准库提供了C++标准库的一个高优先级子集,每个版本都增加了该功能集。但它是一个子集;目前并不是所有功能都可用。API部分列出了可用的工具以及它们最初引入的版本。

NVIDIA C++标准库是在GitHub上开发的开源项目。它是NVIDIA的LLVM libc++.libcu++的变体,在Apache许可证v2.0下分发,但LLVM除外。

NVIDIAC++标准库旨在成为符合国际标准化组织/国际电工委员会14882标准(第16至32条)的C++标准的实现。

NVIDIA C++标准库不会维护ABI的长期稳定性,如果允许ABI的长期稳定性,我们将无法修复错误并提供同类中最好的性能,因此,我们不做这样的承诺。

每个主要的CUDA工具包版本都会中断ABI。ABI版本的生命周期大约为一年。对ABI版本的长期支持将在大约两年后结束。有关更多详细信息,请参阅版本控制部分。

我们建议您始终使用最新的NVIDIA SDK重新编译代码和依赖项,并使用最新的NVIDIA C++标准库ABI。住在头上。