| Exemplos | Documentação doxygen (TODO) |
|---|
cuCollections ( cuco ) é uma biblioteca de cabeçalhos de código aberto, apenas de estruturas de dados concorrentes aceleradas por GPU.
Semelhante a como o impulso e o Cub fornecem algoritmos e primitivos acelerados por STL, a GPU, cuCollections fornecem estruturas de dados simultâneas semelhantes a STL. cuCollections não é uma substituição individual e solidária para estruturas de dados STL como std::unordered_map . Em vez disso, fornece estruturas de dados funcionalmente semelhantes, adaptadas para uso eficiente com as GPUs.
cuCollections ainda estão sob desenvolvimento pesado. Os usuários devem esperar que as mudanças e a refatoração sejam comuns.
11/01/2024 refinou o termo window como bucket
01/08/2024 depreciou o espaço de nome experimental
01/02/2024 moveu o legado static_map para cuco::legacy
cuCollections é apenas o cabeçalho e pode ser incorporado manualmente ao seu projeto, baixando os cabeçalhos e colocando -os em sua árvore de origem.
cuCollections a um projeto CMake cuCollections foi projetada para facilitar a inclusão de outro projeto CMake. O CMakeLists.txt exporta um destino cuco que pode ser vinculado 1 em um destino para configurar incluem diretórios, dependências e sinalizadores de compilação necessários para usar cuCollections em seu projeto.
Recomendamos o uso do CMAKE Package Manager (CPM) para buscar cuCollections em seu projeto. Com o CPM, é fácil obter 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) Isso cuidará do download cuCollections do Github e disponibilizar os cabeçalhos em um local que pode ser encontrado pelo CMake. A ligação ao Target cuco fornecerá tudo o que é necessário para cuco ser usada pelo my_library Target.
1: cuCollections é somente cabeçalho e, portanto, não há componente binário para "link" contra. A terminologia de vinculação vem das target_link_libraries do CMake, que ainda é usada, mesmo para alvos de biblioteca somente para cabeçalho.
nvcc 11.5+ cuCollections depende das seguintes bibliotecas:
Nenhuma ação é necessária do usuário para satisfazer essas dependências. O script cMake da cuCollections está configurado para pesquisar primeiro o sistema para essas bibliotecas e, se não forem encontradas, buscá -las automaticamente no GitHub.
Como cuCollections é apenas o cabeçalho, não há nada a construir para usá-lo.
Para construir os testes, benchmarks e exemplos:
cd $CUCO_ROOT
mkdir -p build
cd build
cmake .. # configure
make # build
ctest --test-dir tests # run testsBinários serão incorporados em:
build/tests/build/benchmarks/build/examples/ Como alternativa, você pode usar o script de construção localizado em ci/build.sh . Chamar esse script sem argumentos acionará uma construção completa que estará localizada no build/local .
cd $CUCO_ROOT
ci/build.sh # configure and build
ctest --test-dir build/local/tests # run tests Para uma lista abrangente de todas as opções disponíveis, juntamente com descrições e exemplos, você pode usar a opção ci/build.sh -h .
Por padrão, cuCollections usa pre-commit.ci , juntamente com mirrors-clang-format para formatar automaticamente os arquivos C ++/CUDA em uma solicitação de tração. Os usuários devem habilitar a opção Allow edits by maintainers para fazer com que a formatação automática funcione.
Opcionalmente, você pode configurar um gancho pre-commit para executar automaticamente clang-format quando for um commit git. Isso pode ser feito instalando pre-commit via conda ou pip :
conda install -c conda-forge pre_commitpip install pre-commite depois correndo:
pre-commit install da raiz do repositório cuCollections . Agora, a formatação do código será executada sempre que você confirmar alterações.
Você também pode querer formatar manualmente o código:
pre-commit run clang-format --all-files mirrors-clang-format garantem a versão correta do clang-format e evita incompatibilidades de versão. Os usuários não devem usar clang-format diretamente na linha de comando para formatar o código.
Doxygen é usado para gerar páginas HTML a partir dos comentários C ++/CUDA no código -fonte.
O exemplo a seguir aborda a maioria dos estilos de comentários e tag do Bloco Doxygen para documentar o código C ++/CUDA nas 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 também usa doxygen como um linhador de documentação. Para verificar o estilo doxygen localmente, execute
./ci/pre-commit/doxygen.sh Planejamos adicionar muitas estruturas de dados simultâneas aceleradas por GPU às cuCollections . A partir de agora, os dois flagships são variantes de tabelas de hash.
static_set cuco::static_set é um contêiner de tamanho fixo que armazena elementos exclusivos em nenhuma ordem específica. Consulte a documentação doxygen em static_set.cuh para obter informações mais detalhadas.
static_map cuco::static_map é uma tabela de hash de tamanho fixo usando endereçamento aberto com sondagem linear. Consulte a documentação doxygen em static_map.cuh para obter informações mais detalhadas.
static_multimap cuco::static_multimap é uma tabela de hash de tamanho fixo que suporta armazenar teclas equivalentes. Ele usa hash duplo por padrão e suporta a mudança para a sondagem linear. Consulte a documentação doxygen em static_multimap.cuh para obter informações mais detalhadas.
static_multiset cuco::static_multiset é um contêiner de tamanho fixo que suporta armazenar teclas equivalentes. Ele usa hash duplo por padrão e suporta a mudança para a sondagem linear. Consulte a documentação doxygen em static_multiset.cuh para obter informações mais detalhadas.
dynamic_map cuco::dynamic_map Links Múltiplos cuco::static_map S para fornecer uma tabela de hash que pode crescer à medida que os pares de valor-chave são inseridos. Atualmente, ele fornece apenas APIs de host-bulk. Consulte a documentação doxygen em dynamic_map.cuh para obter informações mais detalhadas.
hyperloglog cuco::hyperloglog implementa o algoritmo HyperlogLog ++ bem estabelecido para aproximar a contagem de itens distintos em um multiset/fluxo.
bloom_filter cuco::bloom_filter implementa um filtro Bloom bloqueado para consultas de associação ao conjunto aproximado.