| 예 | 독사화물 문서 (TODO) |
|---|
cuCollections ( cuco )는 GPU에 액세스 된 동시 데이터 구조의 오픈 소스, 헤더 전용 라이브러리입니다.
스러스트와 큐브가 STL과 유사한 GPU 가속 알고리즘 및 프리미티브를 제공하는 방법과 마찬가지로, cuCollections STL- 유사 동시 데이터 구조를 제공합니다. cuCollections std::unordered_map 과 같은 STL 데이터 구조를위한 일대일의 드롭 인 교체가 아닙니다. 대신, GPU와 효율적으로 사용하도록 조정 된 기능적으로 유사한 데이터 구조를 제공합니다.
cuCollections 여전히 크게 발전하고 있습니다. 사용자는 변경 사항을 깨고 리팩토링이 일반적이 될 것으로 예상해야합니다.
11/01/2024라는 용어 window bucket 으로 정제했습니다
01/08/2024 experimental 네임 스페이스를 더 이상 사용하지 못했습니다
01/02/2024 레거시 static_map cuco::legacy 네임 스페이스로 옮겼습니다
cuCollections 헤더 전용이며 헤더를 다운로드하여 소스 트리에 배치하여 프로젝트에 수동으로 통합 할 수 있습니다.
cuCollections 추가 cuCollections 다른 CMAKE 프로젝트에 쉽게 포함시킬 수 있도록 설계되었습니다. CMakeLists.txt 는 1 에 연결될 수있는 cuco 대상을 내보내기 위해 대상에 연결할 수 있습니다. 디렉토리, 종속성 및 프로젝트에서 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) 이를 통해 Github에서 cuCollections 다운로드하고 CMAKE에서 찾을 수있는 위치에서 헤더를 사용할 수 있습니다. cuco 목표와 연결하면 cuco my_library 목표에서 사용하는 데 필요한 모든 것을 제공합니다.
1 : cuCollections 는 헤더 전용이므로 "링크"할 이진 성분이 없습니다. 연결 용어는 헤더 전용 라이브러리 대상에도 여전히 사용되는 CMAKE의 target_link_libraries 에서 제공됩니다.
nvcc 11.5+ cuCollections 다음 라이브러리에 따라 다릅니다.
이러한 종속성을 만족시키기 위해 사용자의 조치가 필요하지 않습니다. cuCollections 의 CMake 스크립트는 먼저 이러한 라이브러리에 대한 시스템을 검색하도록 구성되어 있으며, 찾을 수없는 경우 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 옵션을 활성화하여 자동 형성이 작동하도록해야합니다.
선택적으로, GIT 커밋을 할 때 clang-format 자동으로 실행하기 위해 pre-commit 후크를 설정할 수 있습니다. conda 또는 pip 통해 pre-commit 설치하여 수행 할 수 있습니다.
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 소스 코드에서 C ++/CUDA 주석에서 HTML 페이지를 생성하는 데 사용됩니다.
다음 예제는 cuCollections 에서 C ++/Cuda 코드를 문서화하기위한 대부분의 독소 블록 주석 및 태그 스타일을 다룹니다.
/* *
* @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을 문서화 라이터로 사용합니다. Doxygen 스타일을 로컬로 확인하려면 실행하십시오
./ci/pre-commit/doxygen.sh 우리는 많은 gpu-accelerated 동시 데이터 구조를 cuCollections 에 추가 할 계획입니다. 현재 두 플래그십은 해시 테이블의 변형입니다.
static_set cuco::static_set 은 고유 한 크기의 컨테이너로 고유 한 요소를 특별한 순서로 저장합니다. 자세한 정보는 static_set.cuh 의 doxygen 문서를 참조하십시오.
static_map cuco::static_map 선형 프로브와 함께 열린 주소를 사용하는 고정 크기의 해시 테이블입니다. 자세한 정보는 static_map.cuh 의 doxygen 문서를 참조하십시오.
static_multimap cuco::static_multimap 동등한 키를 저장하는 것을 지원하는 고정 크기의 해시 테이블입니다. 기본적으로 이중 해싱을 사용하고 선형 프로브로 전환하는 것이 지원됩니다. 자세한 정보는 static_multimap.cuh 의 doxygen 문서를 참조하십시오.
static_multiset cuco::static_multiset 동등한 키를 저장하는 것을 지원하는 고정 크기 컨테이너입니다. 기본적으로 이중 해싱을 사용하고 선형 프로브로 전환하는 것이 지원됩니다. 자세한 정보는 static_multiset.cuh 의 doxygen 문서를 참조하십시오.
dynamic_map cuco::dynamic_map 여러 cuco::static_map s를 링크하여 키 값 쌍이 삽입 될 때 성장할 수있는 해시 테이블을 제공합니다. 현재 호스트-볼크 API 만 제공합니다. 자세한 정보는 dynamic_map.cuh 의 Doxygen 문서를 참조하십시오.
hyperloglog cuco::hyperloglog 멀티 세트/스트림에서 별개의 항목 수를 근사화하기 위해 잘 확립 된 Hyperloglog ++ 알고리즘을 구현합니다.
bloom_filter cuco::bloom_filter 대략적인 세트 멤버십 쿼리를위한 차단 된 블룸 필터를 구현합니다.