| أمثلة | وثائق Doxygen (TODO) |
|---|
cuCollections ( cuco ) هي مكتبة مفتوحة المصدر فقط من هياكل البيانات المتزامنة مع GPU.
على غرار كيف توفر الدفع والشبل مثل خوارزميات وأجهزة GPU المتسارعة ، توفر cuCollections هياكل بيانات متزامنة تشبه STL. cuCollections ليس بديلاً فرديًا ، وهو استبدال من هياكل بيانات STL مثل std::unordered_map . بدلاً من ذلك ، يوفر هياكل بيانات متشابهة وظيفيًا مصممة للاستخدام الفعال مع وحدات معالجة الرسومات.
لا يزال cuCollections تحت التنمية الثقيلة. يجب أن يتوقع المستخدمون كسر التغييرات وإعادة إنشاء أن تكون شائعة.
11/01/2024 صقل مصطلح window bucket
01/08/2024 أوقفت مساحة الاسم experimental
01/02/2024 نقل Legacy 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 هو رأس فقط وبالتالي لا يوجد عنصر ثنائي لـ "الارتباط" ضد. تأتي مصطلحات الارتباط من CMake's target_link_libraries والتي لا تزال تستخدم حتى في أهداف المكتبة فقط.
nvcc 11.5+ يعتمد cuCollections على المكتبات التالية:
لا يوجد أي إجراء مطلوب من المستخدم لتلبية هذه التبعيات. تم تكوين برنامج cuCollections Cmake Script للبحث أولاً عن النظام عن هذه المكتبات ، وإذا لم يتم العثور عليها ، لجلبها تلقائيًا من 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/ بدلاً من ذلك ، يمكنك استخدام برنامج Build Script الموجود في 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 لتوفير جدول التجزئة الذي يمكن أن ينمو كأزواج القيمة الرئيسية. إنه يوفر حاليًا فقط واجهات برمجة التطبيقات المضيفة. راجع وثائق doxygen في dynamic_map.cuh للحصول على معلومات أكثر تفصيلاً.
hyperloglog cuco::hyperloglog خوارزمية Hyperloglog ++ الراسخة لتقريب عدد العناصر المتميزة في مجموعة متعددة/تيار.
bloom_filter cuco::bloom_filter ينفذ مرشح بلوم محظور لاستعلامات العضوية التقريبية للمجموعة.