الذاكرة المثبّتة باستخدام cudaMallocHost
مخازن مؤمّنة الصفحات لإجراء DMA سريع.
الذاكرة المثبّتة باستخدام cudaMallocHost درس مجاني في CUDA Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في CUDA Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة CUDA Academy 4 دروس في المجموع.
تعرّف إلى الذاكرة المثبتة
الذاكرة المثبتة هي ذاكرة مضيف يتعهد نظام التشغيل بألا ينقلها أو يبدّلها إلى القرص. وبما أن عنوانها الفعلي ثابت، يستطيع GPU قراءتها مباشرةً.
تُسمّى أيضًا مقفلة الصفحات
سترى مصطلح مقفلة الصفحات مستخدمًا مرادفًا لمصطلح مثبتة. ويعني كلاهما الشيء نفسه: صفحات مقفلة في مكانها بحيث لا يمكن تبديلها إلى القرص مطلقًا.
خصّصها بالطريقة الصحيحة
اطلب ذاكرة مثبتة من CUDA باستخدام cudaMallocHost. وستعيد لك مؤشر مضيف عاديًا يمكنك قراءته والكتابة فيه مثل أي مصفوفة C++.
float* h_data;
cudaMallocHost(&h_data, N * sizeof(float));استخدمها كالمعتاد
يعمل المؤشر المُعاد مثل أي مخزن مؤقت للمضيف، لذا يبقى كود CPU لديك دون تغيير. ما عليك سوى تعبئته وقراءة محتواه كما كنت تفعل تمامًا.
for (int i = 0; i < N; ++i) h_data[i] = i * 1.0f;لا حاجة إلى النسخ المرحلي
بما أن الصفحات لا يمكن نقلها، يتجاوز برنامج التشغيل نسخة النسخ المرحلي المخفية. وتقرأ وحدة GPU البيانات مباشرةً من مخزنك المؤقت، لذا تختفي النسخة المزدوجة.
عمليات نقل أسرع
الفائدة هي عرض النطاق الترددي الحقيقي. غالبًا ما تصل عمليات النقل من الذاكرة المثبتة إلى سرعة الذروة للرابط، وقد تكون أسرع تقريبًا بمرتين من إصدار الذاكرة القابلة للصفحات.
تحريرها بالطريقة الصحيحة
تحتاج الذاكرة المثبتة إلى دالة تحرير مطابقة خاصة بها. استخدم cudaFreeHost، ولا تستخدم free العادية مطلقًا، وإلا فقد تتعرض لتعطل وتسرب للذاكرة.
cudaFreeHost(h_data);ليست مساحة مجانية
لا يمكن تبديل الصفحات المثبتة إلى القرص، لذا فهي تحتجز RAM فعلية. إذا ثبّت كمية كبيرة منها، فستحرم بقية النظام من الذاكرة القابلة للاستخدام.
التخصيص أبطأ
يتطلب قفل الصفحات عملًا، لذا يكون cudaMallocHost أبطأ في التخصيص من malloc. أعد استخدام مخزن مؤقت مثبت واحد عبر عمليات نقل متعددة بدلًا من إعادة تخصيصه.
القوة الحقيقية
إلى جانب السرعة، تُعد الذاكرة المثبتة المفتاح الذي يتيح عمليات النسخ غير المتزامنة فعليًا. من دونها، لا يمكن لـ cudaMemcpyAsync أن يتداخل مع أي شيء.
متى تستخدمها
ثبّت المخازن المؤقتة التي تنقلها بكثرة أو التي تغذي التدفقات. أما عند نسخ مصفوفة صغيرة لمرة واحدة، فإن malloc العادية مناسبة تمامًا. 🙂
تحقق سريع
لقد خصصت مخزنًا مؤقتًا باستخدام cudaMallocHost. كيف ينبغي تحريره؟
مراجعة
يثبّت cudaMallocHost صفحات المضيف كي تقرأها وحدة GPU مباشرةً، مما يوفر نسخًا أسرع ويمكّن من التداخل غير المتزامن. احرص دائمًا على تحريرها باستخدام cudaFreeHost. 🔒
تعلم C++ مع معلم ذكاء اصطناعي — مجانًا
اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.
- الدورات
- 30
- الدروس
- 120
الأسئلة الشائعة
هل درس «الذاكرة المثبّتة باستخدام cudaMallocHost» مجاني؟
نعم — نص درس «الذاكرة المثبّتة باستخدام cudaMallocHost» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة CUDA Academy، انتقل إلى CoddyKit PRO. تتضمن دورة CUDA Academy 4 دروس في المجموع.
ماذا ستتعلم في «الذاكرة المثبّتة باستخدام cudaMallocHost»؟
مخازن مؤمّنة الصفحات لإجراء DMA سريع. تتمرن على CUDA Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ CUDA Academy؟
لا تُشترط خبرة سابقة. CUDA Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «الذاكرة المثبّتة باستخدام cudaMallocHost»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس CUDA Academy هذا؟
نعم. كل درس في CUDA Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- لماذا الذاكرة القابلة لترحيل الصفحات بطيئة
- الذاكرة المثبّتة باستخدام cudaMallocHost
- استخدام cudaMemcpyAsync في Stream
- خط أنابيب التخزين المزدوج