سؤال

عند كتابة تطبيقات CUDA ، يمكنك إما العمل في مستوى السائق أو في وقت التشغيل المستوى كما هو موضح في هذه الصورة (المكتبات CUFFT و CUBLAS متقدمة في الرياضيات):

CUDA layer model
(المصدر: tomshw.ذلك)

أفترض المفاضلة بين البلدين وزيادة الأداء المنخفض ايفل API ولكن على حساب زيادة تعقيد من التعليمات البرمجية.ما هي الخرسانة الخلافات و هل هناك أي من الأمور الهامة التي لا يمكنك أن تفعل مع الفريق الرفيع المستوى API ؟

أنا باستخدام CUDA.net عن إمكانية التشغيل المتداخل مع C# و هو كما بنيت نسخة من برنامج التشغيل API.وهذا يشجع كتابة الكثير من معقدة التعليمات البرمجية في C# في حين C++ سوف يكون ما يعادل أكثر بسيطة باستخدام API وقت التشغيل.هل هناك أي شيء للفوز من يفعل ذلك بهذه الطريقة ؟ واحد الاستفادة أرى أنه من الأسهل لدمج ذكي معالجة الخطأ مع بقية التعليمات البرمجية C#.

هل كانت مفيدة؟

المحلول

CUDA وقت التشغيل يجعل من الممكن تجميع الرابط الخاص بك CUDA حبات في الملفات التنفيذية.هذا يعني أنك لا يجب أن توزيع cubin الملفات مع التطبيق الخاص بك ، أو التعامل مع تحميلها من خلال برنامج التشغيل API.كما كنت قد لاحظت, عموما هو أسهل للاستخدام.

في المقابل ، فإن سائق API أصعب أن برنامج توفير المزيد من التحكم في كيفية CUDA يستخدم.مبرمج لديه للتعامل مباشرة مع تهيئة وحدة التحميل, الخ.

على ما يبدو المزيد من معلومات الجهاز مفصلة يمكن الاستعلام من خلال برنامج التشغيل API من خلال API وقت التشغيل.على سبيل المثال, الذاكرة الحرة المتوفرة على الجهاز يمكن الاستعلام فقط من خلال برنامج التشغيل API.

من CUDA دليل للمبرمجين:

وتتكون من اثنين من واجهات برمجة التطبيقات:

  • A API ذات المستوى المنخفض يسمى CUDA سائق API ،
  • أعلى مستوى API يسمى CUDA وقت التشغيل API التي يتم تنفيذها على أعلى CUDA سائق API.

واجهات برمجة التطبيقات هذه هي حصرية:تطبيق يجب استخدام واحد أو أخرى.

CUDA وقت التشغيل يخفف رمز الجهاز الإداري بتوفير الضمني التهيئة سياق إدارة وحدة إدارة.ج المضيف رمز التي تم إنشاؤها بواسطة nvcc يقوم على CUDA وقت التشغيل (انظر القسم 4.2.5) ، لذلك التطبيقات التي تصل إلى هذا الرمز يجب أن تستخدم CUDA وقت التشغيل API.

في المقابل ، CUDA سائق API يتطلب المزيد من المدونة ، هو أصعب البرنامج تصحيح ، ولكن يقدم أفضل مستوى من التحكم و هي لغة مستقلة منذ ذلك فقط يتعامل مع cubin الكائنات (انظر القسم 4.2.5).على وجه الخصوص ، فمن أكثر صعوبة تكوين وإطلاق حبات باستخدام CUDA سائق API منذ التنفيذ وتكوين نواة المعلمات يجب أن تكون محددة واضحة المكالمات وظيفة بدلا من تنفيذ تكوين الجملة هو موضح في القسم 4.2.3.أيضا, جهاز مضاهاة (انظر القسم 4.5.2.9) لا يعمل مع CUDA سائق API.

لا يوجد ملحوظ الفارق في الأداء بين ال API.كيف حبات استخدام الذاكرة وكيف أنها وضعت على GPU (في الإعوجاج و بنات) سيكون أكثر تأثير واضح.

نصائح أخرى

ولقد وجدت أن للانتشار المكتبات في تطبيقات متعددة الخيوط، وكانت السيطرة على السياق CUDA التي تقدمها API سائق الحرجة. معظم زبائني تريد دمج تسريع GPU في التطبيقات الموجودة، وهذه الأيام، وتقريبا جميع التطبيقات متعددة الخيوط. وبما أنني لا يمكن أن نضمن أن كل رمز GPU سيتم تهيئة، تنفيذ ويتم deallocated من نفس موضوع، واضطررت الى استخدام API سائق.

وبلدي محاولات أولية مع مختلف-احترف العمل في API وقت التشغيل فقط أدت إلى الفشل، وأحيانا بطريقة مثيرة - وجدت أنني قد مرارا وتكرارا، وعلى الفور إعادة تشغيل الجهاز عن طريق أداء مجرد مجموعة الخطأ من CUDA يدعو من المواضيع المختلفة

وبما أننا هاجر كل شيء على API سائق، وقد تم كل شيء بشكل جيد.

J

وزوجين من الأشياء الهامة التي يجب ملاحظة:

أولا الاختلافات بين واجهات برمجة التطبيقات تنطبق فقط على رمز الجانب المضيف. حبات هي نفسها تماما. على الجانب المضيف تعقيد المعهد السائق هو تافهة جدا، والاختلافات الجوهرية هي:

وفي المعهد سائق لديك حق الوصول إلى الوظائف التي لا تتوفر في المعهد وقت التشغيل مثل السياقات.

والمحاكي يعمل فقط مع قانون مكتوب للAPI وقت التشغيل.

ويا وحاليا cudpp التي هي مكتبة مفيد جدا يعمل فقط مع المعهد وقت التشغيل.

وهناك بعض القضايا الحقيقية مع محاذاة حجة وAPI سائق. تحقق من CUDA 2.2 بيتا (أو أحدث) الوثائق لمزيد من المعلومات.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top