| ตัวอย่าง | เอกสาร Doxygen (TODO) |
|---|
cuCollections ( cuco ) เป็นห้องสมุดโอเพ่นซอร์ส, ส่วนหัวอย่างเดียวของโครงสร้างข้อมูลที่เร่งความเร็ว GPU และพร้อมกัน
เช่นเดียวกับวิธีที่ THRUST และ CUB ให้อัลกอริธึมเร่งความเร็ว GPU และ GPU แบบเร่งความเร็วและดั้งเดิม cuCollections ให้โครงสร้างข้อมูลที่เกิดขึ้นพร้อมกันของ STL cuCollections ไม่ใช่การแทนที่แบบตัวต่อตัวแบบดรอปอินสำหรับโครงสร้างข้อมูล STL เช่น std::unordered_map แต่ให้โครงสร้างข้อมูลที่คล้ายคลึงกันตามหน้าที่ซึ่งเหมาะสำหรับการใช้งานอย่างมีประสิทธิภาพกับ GPU
cuCollections ยังอยู่ระหว่างการพัฒนาอย่างหนัก ผู้ใช้ควรคาดหวังว่าจะมีการเปลี่ยนแปลงและ refactoring เป็นเรื่องธรรมดา
11/01/2024 ปรับปรุง window คำเป็น bucket
01/08/2024 เลิกใช้งานเนมสเปซ experimental
01/02/2024 ย้ายมรดก static_map ไปที่ cuco::legacy
cuCollections เป็นส่วนหัวเท่านั้นและสามารถรวมเข้ากับโครงการของคุณด้วยตนเองโดยการดาวน์โหลดส่วนหัวและวางไว้ในแผนผังต้นทางของคุณ
cuCollections ลงในโครงการ cmake cuCollections ได้รับการออกแบบมาเพื่อให้ง่ายต่อการรวมไว้ในโครงการ CMake อื่น CMakeLists.txt ส่งออกเป้าหมาย cuco ที่สามารถเชื่อมโยง 1 เข้ากับเป้าหมายในการตั้งค่ารวมถึงไดเรกทอรีการพึ่งพาและการรวบรวมธงที่จำเป็นในการใช้ cuCollections ในโครงการของคุณ
เราขอแนะนำให้ใช้ CMake Package Manager (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 ของ CMake ซึ่งยังคงใช้แม้กระทั่งสำหรับเป้าหมายห้องสมุดส่วนหัวเท่านั้น
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 Block ส่วนใหญ่และรูปแบบแท็กสำหรับการบันทึกรหัส 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 เป็นเอกสารประกอบ หากต้องการตรวจสอบสไตล์ doxygen ในพื้นที่ให้เรียกใช้
./ci/pre-commit/doxygen.sh เราวางแผนที่จะเพิ่มโครงสร้างข้อมูลที่เร่งด้วย GPU จำนวนมากพร้อมกันใน cuCollections ณ ตอนนี้ธงทั้งสองเป็นตัวแปรของตารางแฮช
static_set cuco::static_set เป็นคอนเทนเนอร์ขนาดคงที่ที่เก็บองค์ประกอบที่ไม่ซ้ำกันในลำดับที่ไม่เฉพาะเจาะจง ดูเอกสาร Doxygen ใน 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 เพื่อให้ตารางแฮชที่สามารถเติบโตเป็นคู่คีย์-ค่าถูกแทรก ปัจจุบันมีเฉพาะ APIs Host-Bulk ดูเอกสาร Doxygen ใน dynamic_map.cuh สำหรับข้อมูลรายละเอียดเพิ่มเติม
hyperloglog cuco::hyperloglog ใช้อัลกอริทึม Hyperloglog ++ ที่ได้รับการยอมรับอย่างดีสำหรับการประมาณจำนวนรายการที่แตกต่างกันในหลายชุด/สตรีม
bloom_filter cuco::bloom_filter ใช้ตัวกรอง Bloom ที่ถูกบล็อกสำหรับการสืบค้นสมาชิกชุดโดยประมาณ