| أمثلة | Godbolt | الوثائق |
|---|
LIBCU ++ ، مكتبة NVIDIA C ++ القياسية ، هي المكتبة القياسية C ++ لنظامك بالكامل. يوفر تنفيذًا غير متجانس للمكتبة القياسية C ++ التي يمكن استخدامها في وحدة المعالجة المركزية و CPU و GPU.
إذا كنت تعرف كيفية استخدام مكتبة C ++ القياسية الخاصة بك ، فأنت تعرف كيفية استخدام libcu ++. كل ما عليك فعله هو إضافة cuda/std/ إلى بداية المكتبة القياسية الخاصة بك يتضمن و cuda:: قبل أي استخدامات std::
# include < cuda/std/atomic >
cuda::std::atomic< int > x;مكتبة NVIDIA C ++ القياسية هي مشروع مفتوح المصدر ؛ وهي متوفرة على github وإدراجها في مجموعة أدوات NVIDIA HPC SDK و CUDA. إذا كان لديك واحد من تلك SDKs مثبتة ، فلن تكون هناك حاجة إلى علامات تثبيت إضافية أو برمجية لاستخدام libcu ++.
cuda:: and cuda::std::عند استخدامها مع NVCC ، تعيش مرافق NVIDIA C ++ Library في التسلسل الهرمي الرئيسي ومساحة الاسم مع نفس بنية المكتبة القياسية للمترجم المضيف ، ولكنها متميزة عن المترجم المضيف:
std:: / <*> : عند استخدام NVCC ، هذه هي المكتبة القياسية لمرجم المضيف الخاص بك والتي تعمل في رمز __host__ فقط ، على الرغم من أنه يمكنك استخدام علامة- --expt-relaxed-constexpr لاستخدام أي وظائف constexpr في رمز __device__ . مع NVCC ، لا يستبدل Libcu ++ أو يتداخل مع مكتبة برنامج التحويل البرمجي المضيف.cuda::std:: / <cuda/std/*> : تطبيقات مطابقة للمرافق من المكتبة القياسية التي تعمل في رمز __host__ __device__ .cuda:: / <cuda/*> : ملحقات الامتدادات مع المكتبة القياسية التي تعمل في رمز __host__ __device__ .cuda::device / <cuda/device/*> : الامتدادات المطابقة للمكتبة القياسية التي تعمل فقط في رمز __device__ . // Standard C++, __host__ only.
# include < atomic >
std::atomic< int > x;
// CUDA C++, __host__ __device__.
// Strictly conforming to the C++ Standard.
# include < cuda/std/atomic >
cuda::std::atomic< int > x;
// CUDA C++, __host__ __device__.
// Conforming extensions to the C++ Standard.
# include < cuda/atomic >
cuda::atomic< int , cuda::thread_scope_block> x; تعمل مكتبة NVIDIA C ++ القياسية عبر قاعدة الكود بأكملها ، سواء داخل وعبر رمز المضيف ورمز الجهاز. LIBCU ++ هي مكتبة قياسية C ++ لنظامك بالكامل ، وليس فقط وحدة المعالجة المركزية أو وحدة معالجة الرسومات. كل شيء في cuda:: هو __host__ __device__ .
تم تصميم منشآت Libcu ++ لتمريرها بين مضيف ورمز الجهاز. ما لم يذكر خلاف ذلك ، يمكن نسخ أو نقل أي كائن libcu ++ قابل للنسخ أو نقله بين الرمز المضيف ورمز الجهاز.
تعمل كائنات التزامن عبر رمز المضيف ورمز الجهاز ، ويمكن استخدامها للمزامنة بين مؤشرات ترابط المضيف والجهاز. ومع ذلك ، هناك بعض القيود التي يجب أن تكون على دراية بها ؛ يرجى الاطلاع على قسم التزامن البدائي لمزيد من التفاصيل.
cuda::device::لا تعمل عدد صغير من مرافق Libcu ++ فقط في رمز الجهاز ، وعادةً لأنه لا يوجد تطبيق معقول في رمز المضيف.
هذه المرافق تعيش في cuda::device:: .
اليوم ، توفر مكتبة NVIDIA C ++ القياسية مجموعة فرعية عالية الأولوية من مكتبة C ++ القياسية اليوم ، ويزيد كل إصدار من مجموعة الميزات. لكنها مجموعة فرعية. ليس كل شيء متاح اليوم. يسرد قسم API القياسي المنشآت المتاحة والإصدارات التي تم تقديمها لأول مرة.
مكتبة Nvidia C ++ القياسية هي مشروع مفتوح المصدر تم تطويره على Github. إنه متغير NVIDIA من LLVM's LIBC ++. يتم توزيع libcu ++ ضمن ترخيص Apache v2.0 مع استثناءات LLVM.
تهدف مكتبة NVIDIA C ++ القياسية إلى أن تكون تطبيقًا مطابقًا لمعيار C ++ ، ISO/IEC هو 14882 ، الفقرة من 16 إلى 32.
لا تحافظ مكتبة NVIDIA C ++ القياسية على استقرار ABI على المدى الطويل. إن الاستقرار على المدى الطويل على المدى الطويل من شأنه أن يمنعنا من إصلاح الأخطاء وتوفير أفضل أداء في الفصل. لذلك ، لا نقدم مثل هذه الوعود.
كل إصدار رئيسي من مجموعة أدوات CUDA ، سيتم كسر ABI. دورة حياة إصدار ABI هي حوالي عام واحد. ينتهي الدعم طويل الأجل لإصدار ABI بعد حوالي عامين. يرجى الاطلاع على قسم الإصدار لمزيد من التفاصيل.
نوصيك دائمًا بإعادة ترجمة الكود والتبعيات الخاصة بك مع أحدث NVIDIA SDKs واستخدام أحدث مكتبة NVIDIA C ++ القياسية ABI. العيش في الرأس.