| Ejemplos | Documentación de Doxygen (TODO) |
|---|
cuCollections ( cuco ) es una biblioteca de código abierto solo para encabezado de estructuras de datos concurrentes aceleradas por GPU.
Similar a cómo el empuje y el CUB proporcionan algoritmos y primitivos acelerados con GPU, cuCollections proporciona estructuras de datos concurrentes similares a STL. cuCollections no son un reemplazo uno a uno de STL Data Structures como std::unordered_map . En cambio, proporciona estructuras de datos funcionalmente similares adaptadas para un uso eficiente con GPU.
cuCollections todavía están bajo un gran desarrollo. Los usuarios deben esperar que los cambios de descanso y la refactorización sean comunes.
11/01/2024 refinó el término window como bucket
01/08/2024 desaprobado el espacio de nombres experimental
01/02/2024 Movió el Legacy static_map a cuco::legacy Namespace
cuCollections son solo encabezadas y se pueden incorporar manualmente en su proyecto descargando los encabezados y colocándolos en su árbol de origen.
cuCollections a un proyecto Cmake cuCollections está diseñado para facilitar la inclusión de otro proyecto CMake. El CMakeLists.txt exporta un objetivo cuco que puede vincularse 1 en un objetivo para configurar los directorios, dependencias y compilar indicadores necesarios para usar cuCollections en su proyecto.
Recomendamos usar CMAKE Package Manager (CPM) para obtener cuCollections en su proyecto. Con CPM, obtener cuCollections es fácil:
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) Esto se encargará de descargar cuCollections de GitHub y hacer que los encabezados estén disponibles en un lugar que Cmake puede encontrar. La vinculación con el objetivo cuco proporcionará todo lo necesario para que cuco sea utilizado por el objetivo my_library .
1: cuCollections son solo de encabezado y, por lo tanto, no hay un componente binario para "enlace" contra. La terminología de vinculación proviene de target_link_libraries de CMake que todavía se usa incluso para objetivos de biblioteca solo de encabezado.
nvcc 11.5+ cuCollections dependen de las siguientes bibliotecas:
No se requiere acción del usuario para satisfacer estas dependencias. El script CMake de cuCollections está configurado para buscar primero el sistema para estas bibliotecas, y si no se encuentran, para obtenerlas automáticamente de GitHub.
Dado que cuCollections solo son encabezadas, no hay nada que construir para usarlo.
Para construir las pruebas, puntos de referencia y ejemplos:
cd $CUCO_ROOT
mkdir -p build
cd build
cmake .. # configure
make # build
ctest --test-dir tests # run testsLos binarios se integrarán en:
build/tests/build/benchmarks/build/examples/ Alternativamente, puede usar el script de compilación ubicado en ci/build.sh . Llamar a este script sin argumentos activará una compilación completa que se ubicará en build/local .
cd $CUCO_ROOT
ci/build.sh # configure and build
ctest --test-dir build/local/tests # run tests Para una lista completa de todas las opciones disponibles junto con descripciones y ejemplos, puede usar la opción ci/build.sh -h .
De manera predeterminada, cuCollections usa pre-commit.ci junto con mirrors-clang-format para formatear automáticamente los archivos C ++/CUDA en una solicitud de extracción. Los usuarios deben habilitar la opción Allow edits by maintainers para que funcione automáticamente.
Opcionalmente, es posible que desee configurar un gancho pre-commit para ejecutar automáticamente clang-format cuando hace una confirmación de GIT. Esto se puede hacer instalando pre-commit a través de conda o pip :
conda install -c conda-forge pre_commitpip install pre-commitY luego corriendo:
pre-commit install de la raíz del repositorio cuCollections . Ahora se ejecutará el formato de código cada vez que comete cambios.
También es posible que desee formatear manualmente el código:
pre-commit run clang-format --all-files mirrors-clang-format garantiza la versión correcta de clang-format y evita los desajustes de la versión. Los usuarios no deben usar clang-format directamente en la línea de comando para formatear el código.
Doxygen se usa para generar páginas HTML a partir de los comentarios de C ++/CUDA en el código fuente.
El siguiente ejemplo cubre la mayoría de los estilos de comentario y etiqueta del bloque Doxygen para documentar el código C ++/CUDA en 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 también usan doxygen como un linter de documentación. Para verificar el estilo de doxygen localmente, ejecute
./ci/pre-commit/doxygen.sh Planeamos agregar muchas estructuras de datos concurrentes aceleradas por GPU a cuCollections . A partir de ahora, los dos buques insignia son variantes de tablas hash.
static_set cuco::static_set es un contenedor de tamaño fijo que almacena elementos únicos sin ningún orden particular. Consulte la documentación de Doxygen en static_set.cuh para obtener información más detallada.
static_map cuco::static_map es una tabla hash de tamaño fijo que utiliza direccionamiento abierto con sondeo lineal. Consulte la documentación de Doxygen en static_map.cuh para obtener información más detallada.
static_multimap cuco::static_multimap es una tabla hash de tamaño fijo que admite las teclas equivalentes de almacenamiento. Utiliza el hashing doble de forma predeterminada y admite cambiar a sondeo lineal. Consulte la documentación de Doxygen en static_multimap.cuh para obtener información más detallada.
static_multiset cuco::static_multiset es un contenedor de tamaño fijo que admite el almacenamiento de claves equivalentes. Utiliza el hashing doble de forma predeterminada y admite cambiar a sondeo lineal. Consulte la documentación de Doxygen en static_multiset.cuh para obtener información más detallada.
dynamic_map cuco::dynamic_map Enlace juntos múltiples cuco::static_map s para proporcionar una tabla hash que pueda crecer como pares de valor clave se insertan. Actualmente solo proporciona API de host-bulk. Consulte la documentación de Doxygen en dynamic_map.cuh para obtener información más detallada.
hyperloglog cuco::hyperloglog implementa el algoritmo HyperLogLog ++ bien establecido para aproximar el recuento de elementos distintos en una multiset/transmisión.
bloom_filter cuco::bloom_filter implementa un filtro de floración bloqueado para consultas de membresía de configuración aproximada.