| 例 | ゴッドボルト | ドキュメント |
|---|
NVIDIA C ++標準ライブラリであるLibCU ++は、システム全体のC ++標準ライブラリです。 CPUコードとGPUコードで使用できるC ++標準ライブラリの不均一な実装を提供します。
C ++標準ライブラリの使用方法を知っている場合は、LibCU ++の使用方法を知っています。あなたがしなければならないのは、標準ライブラリの開始にcuda/std/ std::追加することですcuda::
# include < cuda/std/atomic >
cuda::std::atomic< int > x;NVIDIA C ++標準ライブラリは、オープンソースプロジェクトです。 GitHubで入手でき、NVIDIA HPC SDKおよびCUDA Toolkitに含まれています。これらのSDKのいずれかがインストールされている場合、LIBCU ++を使用するために追加のインストールまたはコンパイラフラグは必要ありません。
cuda:: and cuda::std::NVCCで使用する場合、NVIDIA C ++標準ライブラリ施設は、ホストコンパイラの標準ライブラリと同じ構造と同じ構造を持つヘッダー階層と名前空間に住んでいます。
std:: / <*> :NVCCを使用する場合、これは__host__コードのみで機能するホストコンパイラの標準ライブラリですが、 __device__コードでconstexpr関数を使用するには--expt-relaxed-constexprフラグを使用できます。 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:: IS __host__ __device__のすべて。
LIBCU ++施設は、ホストコードとデバイスコードの間で渡されるように設計されています。特に明記しない限り、コピー可能または移動可能なLibCU ++オブジェクトは、ホストとデバイスコードの間でコピーまたは移動できます。
同期オブジェクトは、ホストとデバイスコード間で動作し、ホストスレッドとデバイススレッド間で同期するために使用できます。ただし、注意すべきいくつかの制限があります。詳細については、同期プリミティブセクションをご覧ください。
cuda::device::少数のLIBCU ++施設は、通常、ホストコードに賢明な実装がないため、デバイスコードでのみ機能します。
このような施設はcuda::device::に住んでいます。
今日、NVIDIA C ++標準ライブラリは、今日C ++標準ライブラリの優先度サブセットを提供し、各リリースが機能セットを増やします。しかし、それはサブセットです。今日すべてが利用できるわけではありません。標準のAPIセクションには、利用可能な施設と最初に導入されたリリースがリストされています。
NVIDIA C ++標準ライブラリは、GitHubで開発されたオープンソースプロジェクトです。 LLVMのLIBC ++のNvidiaのバリアントです。 LIBCU ++は、LLVM例外を除いてApacheライセンスv2.0に基づいて配布されます。
NVIDIA C ++標準ライブラリは、C ++標準の適合実装であることを目的としています。ISO/IECは14882、条項16から32です。
NVIDIA C ++標準ライブラリは、長期的なABI安定性を維持していません。長期的なABIの安定性を約束することで、間違いを修正し、クラスのパフォーマンスを最大限に活用できなくなります。だから、私たちはそのような約束をしません。
すべての主要なCUDAツールキットリリース、ABIは壊れます。 ABIバージョンのライフサイクルは約1年です。 ABIバージョンに対する長期的なサポートは、約2年後に終了します。詳細については、バージョン化セクションをご覧ください。
最新のNVIDIA SDKSでコードと依存関係を常に再コンパイルし、最新のNVIDIA C ++標準ライブラリABIを使用することをお勧めします。頭に住んでいる。