| Примеры | Доксиген документация (TODO) |
|---|
cuCollections ( cuco )-это библиотека только с открытым исходным кодом, только заголовок, одновременные структуры данных.
Подобно тому, как тяга и детеныша обеспечивают алгоритмы и примитивы, подобные STL, cuCollections обеспечивает STL-подобные параллельные структуры данных. cuCollections -это не замена для индивидуальных данных для структур STL, таких как std::unordered_map . Вместо этого он обеспечивает функционально сходные структуры данных, адаптированные для эффективного использования с помощью графических процессоров.
cuCollections по -прежнему находится в тяжелом развитии. Пользователи должны ожидать, что нарушающие изменения и рефакторинг будут обычными.
01.11.2024 Уточнил термин window как bucket
01.08.2024 Установил experimental пространство имен
02/02/2024 Перенесите Legacy static_map в cuco::legacy имена пространства имен
cuCollections - это только заголовок и может быть включен вручную в ваш проект, загрузив заголовки и поместив их в ваше исходное дерево.
cuCollections к проекту Cmake cuCollections предназначено для того, чтобы облегчить включение в другой проект Cmake. CMakeLists.txt Экспортирует цель cuco , которая может быть связана 1 с целью настройки, включают каталоги, зависимости и компилированные флаги, необходимые для использования cuCollections в вашем проекте.
Мы рекомендуем использовать диспетчер пакетов Cmake (CPM), чтобы привлечь cuCollections в ваш проект. С CPM получить cuCollections легко:
cmake_minimum_required ( VERSION 3.23.1 FATAL_ERROR)
include ( path /to/CPM.cmake)
CPMAddPackage(
NAME cuco
GITHUB_REPOSITORY NVIDIA/cuCollections
GIT_TAG dev
OPTIONS
"BUILD_TESTS OFF"
"BUILD_BENCHMARKS OFF"
"BUILD_EXAMPLES OFF"
)
target_link_libraries (my_library cuco) Это позаботится о загрузке cuCollections с GitHub и о том, чтобы заголовки были доступны в месте, которое может быть найдено Cmake. Связывание против цели cuco обеспечит все необходимое для использования cuco для цели my_library .
1: cuCollections только для заголовков, и поэтому нет бинарного компонента для «связи» против. Связывание терминологии поступает из target_link_libraries , которая все еще используется даже для целей библиотеки только для заголовков.
nvcc 11.5+ cuCollections зависит от следующих библиотек:
От пользователя не требуется никаких действий, чтобы удовлетворить эти зависимости. Скрипт Cmake от cuCollections настроен на то, чтобы сначала поиск системы для этих библиотек, и если они не найдены, чтобы автоматически извлекать их из GitHub.
Поскольку cuCollections только для заголовков, нет ничего, чтобы построить, чтобы использовать его.
Чтобы создать тесты, тесты и примеры:
cd $CUCO_ROOT
mkdir -p build
cd build
cmake .. # configure
make # build
ctest --test-dir tests # run testsДвоичные файлы будут встроены в:
build/tests/build/benchmarks/build/examples/ В качестве альтернативы вы можете использовать скрипт сборки, расположенный по адресу ci/build.sh . Вызов этого сценария без аргументов вызовет полную сборку, которая будет расположена в build/local .
cd $CUCO_ROOT
ci/build.sh # configure and build
ctest --test-dir build/local/tests # run tests Для полного списка всех доступных вариантов, а также описания и примеров, вы можете использовать опцию ci/build.sh -h .
По умолчанию cuCollections использует pre-commit.ci вместе с mirrors-clang-format для автоматического форматирования файлов C ++/CUDA в запросе вытягивания. Пользователи должны включить вариант Allow edits by maintainers чтобы получить автоформатирование для работы.
Необязательно, вы можете настроить крюк pre-commit для автоматического запуска clang-format когда вы делаете коммит GIT. Это можно сделать путем установки pre-commit через conda или pip :
conda install -c conda-forge pre_commitpip install pre-commitа затем бег:
pre-commit install из корня хранилища cuCollections . Теперь форматирование кода будет запущено каждый раз, когда вы совершаете изменения.
Вы также можете вручную отформатировать код:
pre-commit run clang-format --all-files mirrors-clang-format гарантирует правильную версию clang-format и избегает несоответствий версий. Пользователи не должны использовать clang-format непосредственно в командной строке для форматирования кода.
Doxygen используется для генерации HTML -страниц из комментариев C ++/CUDA в исходном коде.
В следующем примере охватывает большинство комментариев блока Doxygen и стилей тегов для документирования кода C ++/CUDA в cuCollections .
/* *
* @file source_file.cpp
* @brief Description of source file contents
*
* Longer description of the source file contents.
*/
/* *
* @brief Short, one sentence description of the class.
*
* Longer, more detailed description of the class.
*
* A detailed description must start after a blank line.
*
* @tparam T Short description of each template parameter
* @tparam U Short description of each template parameter
*/
template < typename T, typename U>
class example_class {
void get_my_int (); // /< Simple members can be documented like this
void set_my_int ( int value ); // /< Try to use descriptive member names
/* *
* @brief Short, one sentence description of the member function.
*
* A more detailed description of what this function does and what
* its logic does.
*
* @param[in] first This parameter is an input parameter to the function
* @param[in,out] second This parameter is used both as an input and output
* @param[out] third This parameter is an output of the function
*
* @return The result of the complex function
*/
T complicated_function ( int first, double * second, float * third)
{
// Do not use doxygen-style block comments
// for code logic documentation.
}
private:
int my_int; // /< An example private member variable
}; cuCollections также использует Doxygen в качестве документации Linter. Чтобы проверить стиль доксигена на местном уровне, запустите
./ci/pre-commit/doxygen.sh Мы планируем добавить множество одновременных структур данных с ускорением графических процессоров в cuCollections . На данный момент два флагмана являются вариантами хэш -таблиц.
static_set cuco::static_set -это контейнер с фиксированным размером, который хранит уникальные элементы в любом конкретном порядке. См. Доксигенную документацию в static_set.cuh для более подробной информации.
static_map cuco::static_map -это хэш-таблица с фиксированным размером с использованием открытой адресации с линейным зонтированием. Смотрите документацию Doxygen в static_map.cuh для более подробной информации.
static_multimap cuco::static_multimap -это хэш-таблица с фиксированным размером, которая поддерживает хранение эквивалентных ключей. По умолчанию он использует двойное хэширование и поддерживает переключение на линейное зондирование. Смотрите документацию Doxygen в static_multimap.cuh для более подробной информации.
static_multiset cuco::static_multiset -это контейнер с фиксированным размером, который поддерживает хранение эквивалентных ключей. По умолчанию он использует двойное хэширование и поддерживает переключение на линейное зондирование. Смотрите документацию Doxygen в static_multiset.cuh для более подробной информации.
dynamic_map cuco::dynamic_map связывает несколько cuco::static_map s, чтобы обеспечить хэш-таблицу, которая может расти, когда вставлены пары клавиш значения. В настоящее время он предоставляет только API-интерфейсы хоста. Смотрите документацию Doxygen в dynamic_map.cuh для более подробной информации.
hyperloglog cuco::hyperloglog реализует хорошо известный алгоритм гиперлога ++ для аппроксимации подсчета различных элементов в MultiSet/Stream.
bloom_filter cuco::bloom_filter реализует заблокированный фильтр Bloom для приблизительных запросов членства.