النقل من الجهاز إلى المضيف
نزّل النتائج إلى CPU.
النقل من الجهاز إلى المضيف درس مجاني في CUDA Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في CUDA Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة CUDA Academy 4 دروس في المجموع.
إعادة النتائج إلى المضيف
لقد ملأت النواة للتو مخزنًا مؤقتًا على الجهاز بالإجابات، لكن لا يستطيع CPU قراءة ذاكرة GPU مباشرةً. يجب عليك download النتائج إلى الخلف. 📥
اتجاه التنزيل
لسحب البيانات إلى الخلف، استخدم cudaMemcpyDeviceToHost. تكون الذاكرة المصدر الآن ذاكرة الجهاز، وتكون الوجهة ذاكرة RAM الخاصة بالمضيف.
cudaMemcpy(h_c, d_c, bytes, cudaMemcpyDeviceToHost);الوجهة أولًا دائمًا
لا تتغير القاعدة أبدًا: وسيطة destination أولًا، ثم المصدر. عند التنزيل، يأتي مؤشر المضيف أولًا.
cudaMemcpy(h_dst, d_src, bytes, cudaMemcpyDeviceToHost);يجب أن يكون مخزن المضيف موجودًا
تحتاج الوجهة إلى ذاكرة CPU حقيقية مهيّأة لاستقبال البيانات. خصّص مساحة host باستخدام malloc أو new قبل النسخ إلى الخلف.
float* h_c = (float*)malloc(bytes);انتظر انتهاء النواة
ينتظر cudaMemcpy الحاجب إكمال العمل السابق في المجرى الافتراضي، ولذلك تنتهي kernel قبل قراءة أي نتائج.
myKernel<<<blocks, threads>>>(d_c, n);
cudaMemcpy(h_c, d_c, bytes, cudaMemcpyDeviceToHost);عدد البايتات نفسه
نزّل العدد نفسه تمامًا من bytes الذي رفعته وحسبته. تؤدي الأحجام غير المتطابقة إلى نتائج مبتورة أو غير صحيحة.
size_t bytes = n * sizeof(float);يمكنك الآن قراءتها
بعد عودة عملية النسخ، تصبح القيم موجودة في ذاكرة CPU العادية. يمكنك طباعتها أو فحصها أو حفظها مثل أي مصفوفة host.
printf("%f\n", h_c[0]);رحلة الذهاب والإياب
تتكوّن مهمة GPU الكاملة من round trip: رفع المدخلات، وتشغيل النواة، ثم تنزيل المخرجات. وتستخدم كل مرحلة cudaMemcpy.
تحقّق قبل أن تثق
بعد التنزيل، قارن نتيجة GPU بمرجع سريع ينفّذه CPU. يكشف التحقّق bugs قبل أن تنتشر. ✅
حرّر ما خصصته
عند وصول النتائج، حرّر الجانبين: استخدم cudaFree لمخزن الجهاز، وحرّر مخزن المضيف لتجنّب تسرّب الذاكرة.
cudaFree(d_c);
free(h_c);التنزيل يستغرق وقتًا أيضًا
تعبر رحلة العودة الناقل البطيء نفسه، لذا لا تنسخ إلى host إلا النتائج التي تحتاج إليها فعلًا.
تحقّق سريع
كتبت النواة النتائج في المخزن المؤقت للجهاز d_c. كيف تقرؤها على CPU؟
مراجعة
تعلّمت رحلة العودة باستخدام cudaMemcpyDeviceToHost: خصّص مساحة للمضيف، وضع مؤشر المضيف أولًا، وانتظر انتهاء النواة، ثم تحقّق وحرّر الذاكرة. 🎉
الأسئلة الشائعة
هل درس «النقل من الجهاز إلى المضيف» مجاني؟
نعم — نص درس «النقل من الجهاز إلى المضيف» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة CUDA Academy، انتقل إلى CoddyKit PRO. تتضمن دورة CUDA Academy 4 دروس في المجموع.
ماذا ستتعلم في «النقل من الجهاز إلى المضيف»؟
نزّل النتائج إلى CPU. تتمرن على CUDA Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ CUDA Academy؟
لا تُشترط خبرة سابقة. CUDA Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «النقل من الجهاز إلى المضيف»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس CUDA Academy هذا؟
نعم. كل درس في CUDA Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- النقل من المضيف إلى الجهاز
- النقل من الجهاز إلى المضيف
- تعداد اتجاه النسخ
- عنق زجاجة النقل عبر PCIe