النقل من المضيف إلى الجهاز
ارفع بيانات الإدخال إلى GPU.
النقل من المضيف إلى الجهاز درس مجاني في CUDA Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في CUDA Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة CUDA Academy 4 دروس في المجموع.
ذاكرتان وهدف واحد
تبدأ بياناتكم في ذاكرة RAM الخاصة بـhost، لكن GPU لا يستطيع إجراء الحسابات إلا على الأرقام الموجودة في ذاكرته الخاصة بالجهاز. لذلك يجب نقل البيانات أولًا. 🚚
تعرّفوا على cudaMemcpy
تعمل الدالة cudaMemcpy كشاحنة توصيل: فهي تنسخ كتلة من البايتات من عنوان إلى آخر، سواء كان العنوان على المضيف أو الجهاز.
cudaMemcpy(dst, src, bytes, kind);اتجاه الرفع
لإرسال بيانات الإدخال إلى GPU، استخدموا cudaMemcpyHostToDevice. يكون المصدر هو RAM الخاصة بالمضيف، والوجهة هي ذاكرة الجهاز.
cudaMemcpy(d_a, h_a, n*sizeof(float), cudaMemcpyHostToDevice);ترتيب الوسائط مهم
كما في memcpy، تأتي الوجهة أولًا ثم المصدر. وإذا عكسْتموهما بالخطأ، فسيبقى مخزن GPU فارغًا. 😬
cudaMemcpy(d_dst, h_src, bytes, cudaMemcpyHostToDevice);احسبوا البايتات لا العناصر
يُقاس وسيط الحجم بـالبايتات، لذلك اضربوا عدد العناصر في حجم النوع باستخدام sizeof.
size_t bytes = n * sizeof(float);احجزوا الذاكرة قبل النسخ
يجب أن يشير device pointer مسبقًا إلى ذاكرة GPU حقيقية. استخدموا دائمًا cudaMalloc لحجز الوجهة قبل رفع البيانات إليها.
cudaMalloc(&d_a, bytes);
cudaMemcpy(d_a, h_a, bytes, cudaMemcpyHostToDevice);انتظار متزامن
إن cudaMemcpy العادية حاجبة: إذ يتوقف خيط CPU حتى تهبط كل بايت بأمان في GPU.
ثم أطلقوا kernel
ارفعوا البيانات أولًا ثم أجروا الحساب. بعد وصول الإدخال إلى الجهاز، يستطيع kernel قراءته وبدء العمل الفعلي.
cudaMemcpy(d_a, h_a, bytes, cudaMemcpyHostToDevice);
myKernel<<<blocks, threads>>>(d_a, n);يجب أن تتطابق الأحجام
تأكّد من أن عدد البايتات التي ترفعها يناسب حجم المخزن المؤقت الذي خصصته. فنسخ بيانات أكثر مما حجزته يُعدّ خطأ overflow شائعًا.
تحقّق من رمز الإرجاع
تعيد cudaMemcpy قيمة من النوع cudaError_t. افحصها كي يفشل المؤشر أو الحجم غير الصحيح بوضوح بدلًا من إفساد عملية التنفيذ.
cudaError_t err = cudaMemcpy(d_a, h_a, bytes, cudaMemcpyHostToDevice);النسخ ليس مجانيًا
تمرّ كل عملية رفع عبر ناقل PCIe البطيء، لذا لا تنسخ إلى device إلا البيانات التي تحتاج إليها فعلًا.
تحقّق سريع
تريد إرسال مصفوفة إدخال من ذاكرة CPU إلى GPU. أي استدعاء هو الصحيح؟
مراجعة
تعلّمت رفع البيانات باستخدام cudaMemcpyHostToDevice: خصّص مخزنًا مؤقتًا على الجهاز، وضع الوجهة أولًا، وحدّد الحجم بالبايتات، ثم انسخ البيانات قبل التشغيل. 🎉
الأسئلة الشائعة
هل درس «النقل من المضيف إلى الجهاز» مجاني؟
نعم — نص درس «النقل من المضيف إلى الجهاز» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة CUDA Academy، انتقل إلى CoddyKit PRO. تتضمن دورة CUDA Academy 4 دروس في المجموع.
ماذا ستتعلم في «النقل من المضيف إلى الجهاز»؟
ارفع بيانات الإدخال إلى GPU. تتمرن على CUDA Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ CUDA Academy؟
لا تُشترط خبرة سابقة. CUDA Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «النقل من المضيف إلى الجهاز»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس CUDA Academy هذا؟
نعم. كل درس في CUDA Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- النقل من المضيف إلى الجهاز
- النقل من الجهاز إلى المضيف
- تعداد اتجاه النسخ
- عنق زجاجة النقل عبر PCIe