دوال __device__ و__host__
تعرّف على المكان الذي يمكن أن يعمل فيه كل نوع من الدوال.
دوال __device__ و__host__ درس مجاني في CUDA Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في CUDA Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة CUDA Academy 4 دروس في المجموع.
ما بعد النواة
النوى هي نقاط الدخول، لكن معظم الشيفرة توجد في الدوال المساعدة. توفر CUDA مؤهلين إضافيين لتحديد مكان تشغيل الدالة العادية. فلنتعرف إليهما.
مؤهل __device__
تعمل دالة __device__ على GPU، ولا يمكن استدعاؤها إلا من شيفرة GPU أخرى، مثل نواة أو دالة جهاز أخرى.
__device__ int square(int x) {
return x * x;
}دوال مساعدة للنوى
اعتبر دوال __device__ صندوق أدواتك في GPU. فهي تحافظ على ترتيب النوى باحتوائها على المنطق الذي تعيد خيوط الجهاز استخدامه.
مؤهل __host__
يعني مؤهل __host__ شيفرة CPU العادية. وهو الافتراضي، لذلك تُعد دوال C++ العادية دوال مضيف أصلًا.
__host__ void setup() {
// runs on the CPU
}الافتراضي هو المضيف
إذا حذفت جميع المؤهلات، فستكون دالتك مخصصة لـ المضيف افتراضيًا. ولهذا تستمر C++ العادية في الترجمة داخل ملف .cu.
كلاهما معًا
اجمع المؤهلين، وستُترجم الدالة للجانبين. إذ يبني nvcc نسخة لـ CPU ونسخة لـ GPU.
__host__ __device__ int dbl(int x) {
return x + x;
}لماذا الترجمة المزدوجة؟
يتيح تحديد دالة مساعدة بـ __host__ __device__ تشغيل الحساب نفسه في شيفرة مرجعية على CPU وداخل النوى، من دون تكرار. ✨
قواعد الاستدعاء
لا يجوز لشيفرة المضيف استدعاء دالة __device__، كما لا يجوز لشيفرة الجهاز استدعاء دالة مخصصة للمضيف. ويفرض المترجم هذا الحد الفاصل.
لا يمكن استدعاء __global__ من الجهاز
دالة __device__ غير قابلة للإطلاق. وحدها نوى __global__ تقبل الإطلاق بالأقواس الثلاثية من المضيف.
التضمين لتحسين السرعة
غالبًا ما يقوم المترجم بتضمين دوال __device__ الصغيرة، لذلك لا تكلّفك عادةً إحاطة المنطق بدوال مساعدة شيئًا أثناء التشغيل.
اختر الوسم الصحيح
اختر وفقًا لمكان التشغيل: __device__ لدوال GPU المساعدة، و__host__ لشيفرة CPU، وكلاهما عندما يكون المنطق مشتركًا.
فحص سريع
حان وقت اختبار مؤهلي الجهاز والمضيف.
مراجعة
تعلّمت أن __device__ يعمل على GPU، و__host__ يعمل على CPU، وأن الافتراضي هو المضيف، وأن الجمع بينهما يشارك الدالة نفسها بين العالمين. 🎯
الأسئلة الشائعة
هل درس «دوال __device__ و__host__» مجاني؟
نعم — نص درس «دوال __device__ و__host__» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة CUDA Academy، انتقل إلى CoddyKit PRO. تتضمن دورة CUDA Academy 4 دروس في المجموع.
ماذا ستتعلم في «دوال __device__ و__host__»؟
تعرّف على المكان الذي يمكن أن يعمل فيه كل نوع من الدوال. تتمرن على CUDA Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ CUDA Academy؟
لا تُشترط خبرة سابقة. CUDA Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «دوال __device__ و__host__»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس CUDA Academy هذا؟
نعم. كل درس في CUDA Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- مؤهّل الدالة __global__
- دوال __device__ و__host__
- مساحات عناوين منفصلة
- دورة حياة برنامج CUDA