ميزات | أمثلة | البدء | المساهمة | ترخيص | اتصال
STDGPU هي مكتبة مفتوحة المصدر توفر هياكل بيانات GPU عامة لإدارة البيانات السريعة والموثوقة.
insert(begin, end) ، لكتابة رمز C ++ المشتركfind(key) ، لكتابة حبات CUDA مخصصة ، إلخ.بدلاً من توفير نظام بيئي آخر ، تم تصميم STDGPU ليكون مكتبة حاوية خفيفة الوزن . المكتبات السابقة مثل Thrust أو VEXCL أو ArrayFire أو Boost.com التركيز على التنفيذ السريع والفعال لخوارزميات مختلفة وتعمل فقط على البيانات المخزنة بشكل متجاور. يتبع STDGPU نهجًا متعامدًا ويركز على إدارة البيانات السريعة والموثوقة لتمكين التطور السريع لخوارزميات GPU بشكل عام ومرن تمامًا مثل نظرائهم في وحدة المعالجة المركزية.
في قلبه ، تقدم STDGPU هياكل وحاويات بيانات GPU التالية:
atomic و atomic_refالأنواع والمراجع البدائية الذرية | bitsetصفيف بت من الكفاءة في الفضاء | dequeقائمة انتظار مزدوجة الحجم ديناميكي |
queue stackمحولات الحاويات | unordered_map & unordered_setمجموعة من المفاتيح الفريدة وأزواج القيمة الرئيسية | vectorصفيف متجاورة الحجم ديناميكي |
بالإضافة إلى ذلك ، يوفر STDGPU أيضًا وظائف مساعد شائعة الاستخدام في algorithm ، bit ، contract ، cstddef ، execution ، functional ، iterator ، limits ، memory ، mutex ، numeric ، ranges ، type_traits ، utility .
من أجل أداء مهام معقدة بشكل موثوق على وحدة معالجة الرسومات ، تقدم STDGPU واجهات مرنة يمكن استخدامها في كل من الكود اللاأدري ، على سبيل المثال عبر الخوارزميات التي توفرها الدفع ، وكذلك في الكود الأصلي ، على سبيل المثال في نواة CUDA المخصصة.
على سبيل المثال ، يتم استخدام STDGPU على نطاق واسع في Slamcast ، وهو نظام الحضور الحادي عشر القابل للتطوير ، لتنفيذ إعادة بناء المشهد ثلاثي الأبعاد على نطاق واسع في الوقت الحقيقي بالإضافة إلى تدفق البيانات ثلاثية الأبعاد في الوقت الحقيقي بين الخادم وعدد تعسفي من العملاء عن بُعد.
رمز لاأدري . في سياق Slamcast ، تتمثل المهمة البسيطة في تكامل مجموعة من الكتل المحدثة في مجموعة الكتل المجانية المكررة لتدفق البيانات والتي يمكن التعبير عنها بشكل مريح للغاية:
# include < stdgpu/cstddef.h > // stdgpu::index_t
# include < stdgpu/iterator.h > // stdgpu::make_device
# include < stdgpu/unordered_set.cuh > // stdgpu::unordered_set
class stream_set
{
public:
void
add_blocks ( const short3* blocks,
const stdgpu:: index_t n)
{
set. insert ( stdgpu::make_device (blocks),
stdgpu::make_device (blocks + n));
}
// Further functions
private:
stdgpu::unordered_set<short3> set;
// Further members
};الكود الأصلي . يمكن تنفيذ العمليات الأكثر تعقيدًا مثل إنشاء مجموعة من الكتل المحدثة أو الخوارزميات الأخرى التي يمكن أن تُحدث أصليًا ، على سبيل المثال في نواة CUDA المخصصة مع تمكين الواجهة الخلفية CUDA من StdgPU:
# include < stdgpu/cstddef.h > // stdgpu::index_t
# include < stdgpu/unordered_map.cuh > // stdgpu::unordered_map
# include < stdgpu/unordered_set.cuh > // stdgpu::unordered_set
__global__ void
compute_update_set ( const short3* blocks,
const stdgpu:: index_t n,
const stdgpu::unordered_map<short3, voxel*> tsdf_block_map,
stdgpu::unordered_set<short3> mc_update_set)
{
// Global thread index
stdgpu:: index_t i = blockIdx. x * blockDim. x + threadIdx. x ;
if (i >= n) return ;
short3 b_i = blocks[i];
// Neighboring candidate blocks for the update
short3 mc_blocks[ 8 ]
= {
short3 (b_i. x - 0 , b_i. y - 0 , b_i. z - 0 ),
short3 (b_i. x - 1 , b_i. y - 0 , b_i. z - 0 ),
short3 (b_i. x - 0 , b_i. y - 1 , b_i. z - 0 ),
short3 (b_i. x - 0 , b_i. y - 0 , b_i. z - 1 ),
short3 (b_i. x - 1 , b_i. y - 1 , b_i. z - 0 ),
short3 (b_i. x - 1 , b_i. y - 0 , b_i. z - 1 ),
short3 (b_i. x - 0 , b_i. y - 1 , b_i. z - 1 ),
short3 (b_i. x - 1 , b_i. y - 1 , b_i. z - 1 ),
};
for (stdgpu:: index_t j = 0 ; j < 8 ; ++j)
{
// Only consider existing neighbors
if (tsdf_block_map. contains (mc_blocks[j]))
{
mc_update_set. insert (mc_blocks[j]);
}
}
} يمكن العثور على المزيد من الأمثلة في دليل examples .
يتطلب STDGPU مترجم C ++ 17 بالإضافة إلى الحد الأدنى من تبعيات الواجهة الخلفية ويمكن بناؤه بسهولة ودمجه في مشروعك عبر CMake :
يمكن العثور على مزيد من الإرشادات بالإضافة إلى مقدمة شاملة في التصميم ويمكن العثور على واجهة برمجة تطبيقات STDGPU في الوثائق.
للحصول على معلومات مفصلة حول كيفية المساهمة ، راجع القسم المساهم في الوثائق.
موزعة تحت رخصة Apache 2.0. انظر LICENSE لمزيد من المعلومات.
إذا كنت تستخدم STDGPU في أحد مشاريعك ، فيرجى الاستشهاد بالمنشورات التالية:
stdgpu: هياكل بيانات تشبه STL فعالة على وحدة معالجة الرسومات
@UNPUBLISHED { stotko2019stdgpu ,
author = { Stotko, P. } ,
title = { {stdgpu: Efficient STL-like Data Structures on the GPU} } ,
year = { 2019 } ,
month = aug,
note = { arXiv:1908.05936 } ,
url = { https://arxiv.org/abs/1908.05936 }
}Slamcast: إعادة بناء ثلاثية الأبعاد واسعة النطاق في الوقت الفعلي وتدفق من أجل الحضور المباشر متعدد الرفعات الغامرة
@article { stotko2019slamcast ,
author = { Stotko, P. and Krumpen, S. and Hullin, M. B. and Weinmann, M. and Klein, R. } ,
title = { {SLAMCast: Large-Scale, Real-Time 3D Reconstruction and Streaming for Immersive Multi-Client Live Telepresence} } ,
journal = { IEEE Transactions on Visualization and Computer Graphics } ,
volume = { 25 } ,
number = { 5 } ,
pages = { 2102--2112 } ,
year = { 2019 } ,
month = may
}باتريك ستوتكو - [email protected] -bonn.de