نماذج لمطوري CUDA توضح الميزات الموجودة في مجموعة أدوات CUDA. يدعم هذا الإصدار مجموعة أدوات CUDA 12.5.
يصف هذا القسم ملاحظات الإصدار لنماذج CUDA على GitHub فقط.
قم بتنزيل وتثبيت مجموعة أدوات CUDA 12.5 للنظام الأساسي المقابل لديك. للتعرف على متطلبات النظام وتعليمات تثبيت مجموعة أدوات cuda، يرجى الرجوع إلى دليل تثبيت Linux ودليل تثبيت Windows.
استخدام git clone لمستودع عينات CUDA باستخدام الأمر أدناه.
git clone https://github.com/NVIDIA/cuda-samples.git
أسهل طريقة لاستخدام هذه العينات بدون استخدام git هي تنزيل الملف المضغوط الذي يحتوي على الإصدار الحالي عن طريق النقر فوق الزر "تنزيل ZIP" في صفحة الريبو. يمكنك بعد ذلك فك ضغط الأرشيف بأكمله واستخدام العينات.
تم إنشاء نماذج Windows باستخدام Visual Studio IDE. يتم توفير ملفات الحلول (.sln) لكل إصدار مدعوم من Visual Studio، باستخدام التنسيق:
*_vs<version>.sln - for Visual Studio <version>
توجد ملفات حلول العينات الكاملة في الدليل الأصلي للريبو:
تحتوي كل عينة فردية على مجموعة ملفات الحلول الخاصة بها في: <CUDA_SAMPLES_REPO>Samples<sample_dir>
لبناء/فحص جميع العينات مرة واحدة، يجب استخدام ملفات الحلول الكاملة. لبناء/فحص عينة واحدة، يجب استخدام ملفات حل العينات الفردية.
تم إنشاء عينات Linux باستخدام ملفات تعريفية. لاستخدام ملفات makefiles، قم بتغيير الدليل الحالي إلى الدليل النموذجي الذي ترغب في إنشائه، ثم قم بتشغيل make:
$ cd <sample_dir>
$ make
يمكن لملفات إنشاء العينات الاستفادة من خيارات معينة:
TARGET_ARCH= - ترجمة مشتركة تستهدف بنية معينة. البنى المسموح بها هي x86_64 وppc64le وarmv7l وaarch64. افتراضيًا، يتم تعيين TARGET_ARCH على HOST_ARCH. على جهاز x86_64، عدم تعيين TARGET_ARCH يعادل إعداد TARGET_ARCH=x86_64.
$ make TARGET_ARCH=x86_64
$ make TARGET_ARCH=ppc64le
$ make TARGET_ARCH=armv7l
$ make TARGET_ARCH=aarch64
انظر هنا لمزيد من التفاصيل حول تجميع عينات cuda عبر الأنظمة الأساسية.
dbg=1 - الإنشاء باستخدام رموز التصحيح
$ make dbg=1
SMS="AB..." - تجاوز بنيات SM التي سيتم إنشاء العينة لها، حيث تكون "AB ..."
عبارة عن قائمة بنيات SM مفصولة بمسافات. على سبيل المثال، لإنشاء SASS لـ SM 50 وSM 60، استخدم SMS="50 60"
.
$ make SMS="50 60"
HOST_COMPILER=<host_compiler> - تجاوز مترجم مضيف g++ الافتراضي. راجع دليل تثبيت Linux للحصول على قائمة بالمترجمين المضيفين المعتمدين.
$ make HOST_COMPILER=g++
عينات CUDA الأساسية للمبتدئين التي توضح المفاهيم الأساسية باستخدام واجهات برمجة تطبيقات وقت التشغيل CUDA وCUDA.
نماذج من الأدوات المساعدة توضح كيفية الاستعلام عن إمكانيات الجهاز وقياس النطاق الترددي لوحدة معالجة الرسومات/وحدة المعالجة المركزية.
عينات توضح المفاهيم المتعلقة بـ CUDA وتقنيات حل المشكلات الشائعة.
عينات توضح ميزات CUDA (المجموعات التعاونية، والتوازي الديناميكي CUDA، والرسوم البيانية CUDA، وما إلى ذلك).
نماذج توضح كيفية استخدام مكتبات النظام الأساسي CUDA (NPP وNVJPEG وNVGRAPH cuBLAS وcuFFT وcuSPARSE وcuSOLVER وcuRAND).
العينات الخاصة بالمجال (الرسومات، المالية، معالجة الصور).
العينات التي توضح تحسين الأداء.
عينات توضح استخدام libNVVVM وNVVM IR.
تعتمد بعض نماذج CUDA على تطبيقات و/أو مكتبات الطرف الثالث، أو الميزات التي توفرها مجموعة أدوات CUDA وبرنامج التشغيل، إما للإنشاء أو التنفيذ. يتم سرد هذه التبعيات أدناه.
إذا كانت العينة تحتوي على تبعية لجهة خارجية متوفرة على النظام، ولكن لم يتم تثبيتها، فسوف تتنازل العينة عن نفسها في وقت الإنشاء.
يتم إدراج تبعيات كل عينة في قسم تبعيات README الخاص بها.
تبعيات الطرف الثالث هذه مطلوبة من قبل بعض عينات CUDA. إذا كانت هذه التبعيات متوفرة، فسيتم تثبيتها على نظامك تلقائيًا، أو يمكن تثبيتها عبر مدير حزم نظامك (Linux) أو موقع ويب تابع لجهة خارجية.
FreeImage هي مكتبة صور مفتوحة المصدر. يمكن عادةً تثبيت FreeImage على Linux باستخدام نظام مدير الحزم الخاص بالتوزيع. يمكن أيضًا تنزيل FreeImage من موقع FreeImage الإلكتروني.
لإعداد FreeImage على نظام Windows، قم باستخراج توزيع FreeImage DLL إلى المجلد ../../../Common/FreeImage/Dist/x64
بحيث يحتوي على ملفات .h و.lib. انسخ ملف .dll إلى مجلد مستوى الجذر bin/win64/Debug
و bin/win64/Release
.
MPI (واجهة تمرير الرسائل) هي واجهة برمجة تطبيقات لتوصيل البيانات بين العمليات الموزعة. يمكن تثبيت مترجم MPI باستخدام نظام مدير الحزم الخاص بتوزيع Linux الخاص بك. وهو متاح أيضًا على بعض الموارد عبر الإنترنت، مثل Open MPI. على نظام التشغيل Windows، لإنشاء تطبيقات MPI-CUDA وتشغيلها، يمكن تثبيت MS-MPI SDK.
لا يمكن تشغيل بعض العينات إلا على نظام تشغيل 64 بت.
DirectX عبارة عن مجموعة من واجهات برمجة التطبيقات (APIs) المصممة للسماح بتطوير تطبيقات الوسائط المتعددة على منصات Microsoft. بالنسبة لمنصات Microsoft الأساسية، يدعم برنامج تشغيل CUDA الخاص بـ NVIDIA برنامج DirectX. توضح العديد من نماذج CUDA لنظام التشغيل Windows إمكانية التشغيل التفاعلي لـ CUDA-DirectX، ولإنشاء مثل هذه العينات يحتاج المرء إلى تثبيت Microsoft Visual Studio 2012 أو إصدار أحدث والذي يوفر Microsoft Windows SDK لنظام التشغيل Windows 8.
DirectX 12 عبارة عن مجموعة من واجهات برمجة التطبيقات المتقدمة للبرمجة منخفضة المستوى والتي يمكن أن تقلل من حمل برنامج التشغيل، وهي مصممة للسماح بتطوير تطبيقات الوسائط المتعددة على منصات Microsoft بدءًا من نظام التشغيل Windows 10 وما بعده. بالنسبة لمنصات Microsoft الأساسية، يدعم برنامج تشغيل CUDA الخاص بـ NVIDIA برنامج DirectX. يوضح عدد قليل من نماذج CUDA لنظام التشغيل Windows إمكانية التشغيل التفاعلي لـ CUDA-DirectX12، ولإنشاء مثل هذه العينات يحتاج المرء إلى تثبيت Windows 10 SDK أو أعلى، مع VS 2015 أو VS 2017.
OpenGL هي مكتبة رسومات تُستخدم للعرض ثنائي الأبعاد وثلاثي الأبعاد. في الأنظمة التي تدعم OpenGL، يتم توفير تطبيق OpenGL الخاص بـ NVIDIA مع برنامج تشغيل CUDA.
OpenGL ES عبارة عن مكتبة رسومات أنظمة مضمنة تستخدم للعرض ثنائي الأبعاد وثلاثي الأبعاد. في الأنظمة التي تدعم OpenGL ES، يتم توفير تطبيق OpenGL ES من NVIDIA مع برنامج تشغيل CUDA.
Vulkan عبارة عن واجهة برمجة تطبيقات للرسومات ثلاثية الأبعاد وحسابية منخفضة التكلفة ومتعددة الأنظمة الأساسية. يستهدف Vulkan تطبيقات الرسومات ثلاثية الأبعاد عالية الأداء في الوقت الفعلي مثل ألعاب الفيديو والوسائط التفاعلية عبر جميع الأنظمة الأساسية. في الأنظمة التي تدعم Vulkan، يتم توفير تطبيق NVIDIA's Vulkan مع برنامج تشغيل CUDA. لإنشاء تطبيقات Vulkan وتشغيلها، يحتاج المرء إلى تثبيت Vulkan SDK.
OpenMP عبارة عن واجهة برمجة تطبيقات لبرمجة المعالجة المتعددة. يمكن تثبيت OpenMP باستخدام نظام مدير الحزم الخاص بتوزيع Linux الخاص بك. وعادة ما يأتي مثبتًا مسبقًا مع دول مجلس التعاون الخليجي. ويمكن العثور عليه أيضًا على موقع OpenMP.
الشاشة عبارة عن نظام نوافذ موجود في نظام التشغيل QNX. عادةً ما يتم العثور على Screen كجزء من نظام الملفات الجذر.
X11 هو نظام نوافذ شائع الاستخدام في أنظمة التشغيل ذات النمط *-nix. يمكن تثبيت X11 باستخدام مدير الحزم الخاص بتوزيع Linux الخاص بك، ويأتي مثبتًا مسبقًا على أنظمة Mac OS X.
EGL عبارة عن واجهة بين واجهات برمجة تطبيقات عرض Khronos (مثل OpenGL أو OpenGL ES أو OpenVG) ونظام نوافذ النظام الأساسي الأصلي.
EGLOutput عبارة عن مجموعة من امتدادات EGL التي تسمح لـ EGL بالعرض مباشرة على الشاشة.
EGLSync عبارة عن مجموعة من امتدادات EGL التي توفر كائنات مزامنة بدائية للمزامنة، وتمثل الأحداث التي يمكن اختبار اكتمالها أو انتظارها.
NvSci عبارة عن مجموعة من مكتبات واجهة الاتصال التي يتداخل منها CUDA مع NvSciBuf وNvSciSync. يسمح NvSciBuf للتطبيقات بتخصيص وتبادل المخازن المؤقتة في الذاكرة. يسمح NvSciSync للتطبيقات بإدارة كائنات المزامنة التي تنسق عند بدء تسلسل العمليات وانتهائها.
يوفر NvMedia معالجة قوية لبيانات الوسائط المتعددة لتسريع الأجهزة بشكل حقيقي عبر أجهزة NVIDIA Tegra. تستفيد التطبيقات من واجهة برمجة تطبيقات NvMedia (API) لمعالجة بيانات الصورة والفيديو.
ميزات CUDA هذه مطلوبة في بعض عينات CUDA. يتم توفيرها بواسطة مجموعة أدوات CUDA أو برنامج تشغيل CUDA. قد لا تكون بعض الميزات متوفرة على نظامك.
إجراءات رد الاتصال لـ CUFFT هي إجراءات kernel مقدمة من المستخدم والتي ستستدعيها CUFFT عند تحميل البيانات أو تخزينها. تتوفر إجراءات رد الاتصال هذه فقط على أنظمة Linux x86_64 وppc64le.
يسمح CDP (التوازي الديناميكي CUDA) بإطلاق النواة من سلاسل الرسائل التي تعمل على وحدة معالجة الرسومات. CDP متاح فقط على وحدات معالجة الرسومات ذات بنية SM 3.5 أو أعلى.
تعمل المجموعات التعاونية متعددة الكتل (MBCG) على توسيع المجموعات التعاونية ونموذج برمجة CUDA للتعبير عن التزامن بين الكتل. يتوفر MBCG على وحدات معالجة الرسومات ذات بنية Pascal والهندسة الأعلى.
تعمل المجموعات التعاونية متعددة الأجهزة على توسيع المجموعات التعاونية ونموذج برمجة CUDA، مما يتيح لكتل الخيوط التي يتم تنفيذها على وحدات معالجة الرسومات المتعددة التعاون والمزامنة أثناء تنفيذها. تتوفر هذه الميزة على وحدات معالجة الرسومات ذات بنية Pascal والهندسة الأعلى.
CUBLAS (الروتينات الفرعية للجبر الخطي الأساسي CUDA) هي نسخة مسرعة بواسطة GPU من مكتبة BLAS.
يسمح IPC (الاتصال بين العمليات) للعمليات بمشاركة مؤشرات الجهاز.
CUFFT (تحويل فورييه السريع CUDA) هي مكتبة FFT يتم تسريعها بواسطة GPU.
CURAND (CUDA Random Number Generation) هي مكتبة RNG تسريعها بواسطة GPU.
توفر CUSPARSE (CUDA Sparse Matrix) إجراءات فرعية للجبر الخطي تستخدم في حسابات المصفوفات المتفرقة.
مكتبة CUSOLVER عبارة عن حزمة عالية المستوى تعتمد على مكتبات CUBLAS وCUSPARSE. فهو يجمع بين ثلاث مكتبات منفصلة تحت مظلة واحدة، ويمكن استخدام كل منها بشكل مستقل أو بالتنسيق مع مكتبات مجموعة الأدوات الأخرى. الهدف من CUSOLVER هو توفير ميزات مفيدة تشبه LAPACK، مثل تحليل المصفوفة المشتركة وإجراءات الحل الثلاثي للمصفوفات الكثيفة، وحل المربعات الصغرى المتفرقة، وحلال القيمة الذاتية. بالإضافة إلى ذلك، يوفر cuSolver مكتبة إعادة هيكلة جديدة مفيدة لحل تسلسل المصفوفات بنمط متناثر مشترك.
توفر NPP (NVIDIA Performance Primitives) وظائف معالجة الصور والفيديو والإشارات المسرَّعة بواسطة وحدة معالجة الرسومات.
NVGRAPH هي مكتبة لتحليلات الرسوم البيانية المسرَّعة بواسطة GPU.
توفر مكتبة NVJPEG أداءً عاليًا ووظيفة فك تشفير JPEG المسرّعة بواسطة وحدة معالجة الرسومات لتنسيقات الصور المستخدمة بشكل شائع في تطبيقات التعلم العميق والوسائط المتعددة واسعة النطاق.
NVRTC (CUDA RunTime Compilation) هي مكتبة تجميع وقت التشغيل لـ CUDA C++.
تتيح أولويات الدفق إنشاء تدفقات ذات أولويات محددة. تتوفر أولويات البث فقط على وحدات معالجة الرسومات ذات بنية SM التي تبلغ 3.5 أو أعلى.
تتيح UVM (الذاكرة الظاهرية الموحدة) الذاكرة التي يمكن الوصول إليها بواسطة كل من وحدة المعالجة المركزية ووحدة معالجة الرسومات دون النسخ الصريح بين الاثنين. UVM متاح فقط على أنظمة Linux وWindows.
FP16 هو تنسيق الفاصلة العائمة 16 بت. يتم استخدام بت واحد للعلامة، وخمس بتات للأس، وعشر بتات للجزء العشري.
دعم NVCC لميزات C++ 11.
تم إنشاء عينات libNVVM باستخدام CMake 3.10 أو الأحدث.
نحن نرحب بمدخلاتكم بشأن القضايا والاقتراحات للعينات. في الوقت الحالي، لا نقبل مساهمات من الجمهور، يمكنك التحقق مرة أخرى هنا بينما نقوم بتطوير نموذج المساهمة الخاص بنا.
نحن نستخدم Google C++ Style Guide لجميع المصادر https://google.github.io/styleguide/cppguide.html
يمكن العثور على إجابات الأسئلة المتداولة حول CUDA على http://developer.nvidia.com/cuda-faq وفي ملاحظات إصدار مجموعة أدوات CUDA.