| Примеры | Godbolt | Документация |
|---|
Libcu ++, стандартная библиотека Nvidia C ++, является стандартной библиотекой C ++ для всей вашей системы. Он обеспечивает гетерогенную реализацию стандартной библиотеки C ++, которая может использоваться в коде ЦП и GPU.
Если вы знаете, как использовать свою стандартную библиотеку C ++, то вы знаете, как использовать Libcu ++. Все, что вам нужно сделать, это добавить cuda/std/ к началу вашей стандартной библиотеки включает в себя и cuda:: Перед использованием std::
# include < cuda/std/atomic >
cuda::std::atomic< int > x;Стандартная библиотека NVIDIA C ++ является проектом с открытым исходным кодом; Он доступен на GitHub и включен в NVIDIA HPC SDK и CUDA Toolkit. Если у вас установлен один из этих SDK, для использования Libcu ++ не требуется дополнительных флагов установки или компилятора.
cuda:: и cuda::std::При использовании с NVCC стандартные библиотечные объекты NVIDIA C ++ живут в своей собственной иерархии заголовка и пространстве имен с той же структурой, что и в отличие от стандартной библиотеки компилятора хоста:
std:: / <*> : при использовании NVCC это стандартная библиотека компилятора вашего хоста, которая работает только в коде __host__ , хотя вы можете использовать флаг --expt-relaxed-constexpr для использования любых функций constexpr в коде __device__ . С 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 ++ является стандартной библиотекой C ++ для всей вашей системы, а не только для вашего ЦП или графического процессора. Все в cuda:: is __host__ __device__ .
Объекты Libcu ++ предназначены для передачи между хостом и кодом устройства. Если не указано иное, какой -либо объект Libcu ++, который является копируемым или подвижным, может быть скопирован или перемещен между хостом и кодом устройства.
Объекты синхронизации работают через код хоста и устройства и могут использоваться для синхронизации между потоками хоста и устройства. Тем не менее, есть некоторые ограничения, чтобы знать; Пожалуйста, смотрите раздел примитивов синхронизации для получения более подробной информации.
cuda::device::Небольшое количество объектов Libcu ++ работает только в коде устройства, как правило, потому, что в коде хоста нет разумной реализации.
Такие средства живут в cuda::device:: .
Сегодня стандартная библиотека NVIDIA C ++ сегодня обеспечивает высокоприоритетное подмножество стандартной библиотеки C ++, и каждый выпуск увеличивает набор функций. Но это подмножество; Не все доступно сегодня. Стандартный раздел API перечисляет доступные объекты и в выпусках, которые они были впервые представлены.
Стандартная библиотека NVIDIA C ++ - это проект с открытым исходным кодом, разработанный на GitHub. Это вариант NVIDIA LIBC ++ от LLVM. Libcu ++ распределяется по лицензии Apache v2.0 за исключением LLVM.
Стандартная библиотека NVIDIA C ++ стремится стать соответствующей реализацией стандарта C ++, ISO/IEC - 14882, пункт 16–32.
Стандартная библиотека NVIDIA C ++ не поддерживает долгосрочную стабильность ABI. Перспективная долгосрочная стабильность ABI не позволит нам исправлять ошибки и обеспечить лучшую работу в классе. Итак, мы не даем таких обещаний.
Каждый крупный релиз инструментария CUDA, ABI будет сломан. Жизненный цикл версии ABI составляет приблизительно один год. Долгосрочная поддержка версии ABI заканчивается примерно через два года. Пожалуйста, смотрите раздел версий для получения более подробной информации.
Мы рекомендуем вам всегда перекомпилировать свой код и зависимости с последними NVIDIA SDKS и использовали новейшую стандартную библиотеку NVIDIA C ++ ABI. Жить в голове.