| Contoh | Dokumentasi Doxygen (TODO) |
|---|
cuCollections ( cuco ) adalah perpustakaan open-source, header saja dari struktur data bersamaan yang dipercepat GPU.
Mirip dengan bagaimana Dorong dan Cub menyediakan algoritma dan primitif yang dipercepat GPU, GPU, cuCollections menyediakan struktur data bersamaan seperti STL. cuCollections bukan penggantian satu-ke-satu, drop-in untuk struktur data STL seperti std::unordered_map . Sebagai gantinya, ia menyediakan struktur data yang serupa secara fungsional yang disesuaikan untuk penggunaan yang efisien dengan GPU.
cuCollections masih di bawah pengembangan besar. Pengguna harus mengharapkan perubahan perubahan dan refactoring menjadi umum.
11/01/2024 menyempurnakan istilah window sebagai bucket
01/08/2024 mencela namespace experimental
01/02/2024 Pindahkan Legacy static_map ke cuco::legacy Namespace
cuCollections hanya header dan dapat dimasukkan secara manual ke dalam proyek Anda dengan mengunduh header dan menempatkannya ke dalam pohon sumber Anda.
cuCollections ke Proyek CMake cuCollections dirancang untuk memudahkan dimasukkan ke dalam proyek CMake lain. CMakeLists.txt mengekspor target cuco yang dapat dihubungkan 1 ke target untuk pengaturan termasuk direktori, dependensi, dan menyusun bendera yang diperlukan untuk menggunakan cuCollections dalam proyek Anda.
Kami merekomendasikan menggunakan CMake Package Manager (CPM) untuk mengambil cuCollections ke dalam proyek Anda. Dengan CPM, membuat cuCollections mudah:
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) Ini akan mengurus cuCollections dari GitHub dan membuat header tersedia di lokasi yang dapat ditemukan oleh CMake. Menghubungkan terhadap target cuco akan memberikan segala yang diperlukan untuk cuco untuk digunakan oleh target my_library .
1: cuCollections hanya header dan oleh karena itu tidak ada komponen biner untuk "menghubungkan" terhadap. Terminologi tautan berasal dari target_link_libraries CMake yang masih digunakan bahkan untuk target perpustakaan header saja.
nvcc 11.5+ cuCollections tergantung pada perpustakaan berikut:
Tidak ada tindakan yang diperlukan dari pengguna untuk memenuhi dependensi ini. Script CMake cuCollections dikonfigurasikan untuk terlebih dahulu mencari sistem untuk perpustakaan ini, dan jika tidak ditemukan, untuk secara otomatis mengambilnya dari GitHub.
Karena cuCollections hanya header, tidak ada yang bisa dibangun untuk menggunakannya.
Untuk membangun tes, tolok ukur, dan contoh:
cd $CUCO_ROOT
mkdir -p build
cd build
cmake .. # configure
make # build
ctest --test-dir tests # run testsBinari akan dibangun di dalam:
build/tests/build/benchmarks/build/examples/ Atau, Anda dapat menggunakan skrip build yang terletak di ci/build.sh . Memanggil skrip ini tanpa argumen akan memicu bangunan penuh yang akan berlokasi di build/local .
cd $CUCO_ROOT
ci/build.sh # configure and build
ctest --test-dir build/local/tests # run tests Untuk daftar komprehensif dari semua opsi yang tersedia bersama dengan deskripsi dan contoh, Anda dapat menggunakan opsi ci/build.sh -h .
Secara default, cuCollections menggunakan pre-commit.ci bersama dengan mirrors-clang-format untuk secara otomatis memformat file C ++/CUDA dalam permintaan tarik. Pengguna harus mengaktifkan opsi Allow edits by maintainers untuk mendapatkan format otomatis berfungsi.
Secara opsional, Anda mungkin ingin mengatur kait pre-commit untuk secara otomatis menjalankan clang-format saat membuat komitmen git. Ini dapat dilakukan dengan memasang pre-commit melalui conda atau pip :
conda install -c conda-forge pre_commitpip install pre-commitDan kemudian berjalan:
pre-commit install dari akar repositori cuCollections . Sekarang pemformatan kode akan dijalankan setiap kali Anda melakukan perubahan.
Anda mungkin juga ingin memformat kode secara manual:
pre-commit run clang-format --all-files mirrors-clang-format menjamin versi yang benar dari clang-format dan menghindari ketidakcocokan versi. Pengguna tidak boleh menggunakan clang-format secara langsung pada baris perintah untuk memformat kode.
Doxygen digunakan untuk menghasilkan halaman HTML dari komentar C ++/CUDA dalam kode sumber.
Contoh berikut ini mencakup sebagian besar komentar blok doksygen dan gaya tag untuk mendokumentasikan kode C ++/CUDA dalam 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 juga menggunakan doxygen sebagai linter dokumentasi. Untuk memeriksa gaya doxygen secara lokal, jalankan
./ci/pre-commit/doxygen.sh Kami berencana untuk menambahkan banyak struktur data bersamaan GPU yang diperkuat, ke dalam cuCollections . Sampai sekarang, kedua andalannya adalah varian tabel hash.
static_set cuco::static_set adalah wadah ukuran tetap yang menyimpan elemen unik tanpa urutan tertentu. Lihat dokumentasi Doxygen di static_set.cuh untuk informasi yang lebih rinci.
static_map cuco::static_map adalah tabel hash ukuran tetap menggunakan pengalamatan terbuka dengan probing linier. Lihat dokumentasi doxygen di static_map.cuh untuk informasi yang lebih rinci.
static_multimap cuco::static_multimap adalah tabel hash ukuran tetap yang mendukung penyimpanan kunci yang setara. Ini menggunakan hashing ganda secara default dan mendukung switching ke probing linier. Lihat dokumentasi Doxygen di static_multimap.cuh untuk informasi yang lebih rinci.
static_multiset cuco::static_multiset adalah wadah ukuran tetap yang mendukung penyimpanan kunci yang setara. Ini menggunakan hashing ganda secara default dan mendukung switching ke probing linier. Lihat dokumentasi Doxygen di static_multiset.cuh untuk informasi yang lebih rinci.
dynamic_map cuco::dynamic_map tautan bersama beberapa cuco::static_map s untuk menyediakan tabel hash yang dapat tumbuh sebagai pasangan nilai kunci dimasukkan. Saat ini hanya menyediakan API host-bulk. Lihat dokumentasi Doxygen di dynamic_map.cuh untuk informasi yang lebih rinci.
hyperloglog cuco::hyperloglog mengimplementasikan algoritma Hyperloglog ++ yang mapan untuk mendekati jumlah item yang berbeda dalam multiset/stream.
bloom_filter cuco::bloom_filter mengimplementasikan filter mekar yang diblokir untuk perkiraan permintaan keanggotaan.