مساحات عناوين منفصلة
لماذا يكون مؤشر المضيف غير صالح على الجهاز.
مساحات عناوين منفصلة درس مجاني في CUDA Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في CUDA Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة CUDA Academy 4 دروس في المجموع.
بعض أجزاء هذا الدرس لم تُترجم بعد وتظهر باللغة الإنجليزية.
Two Separate Memories
The CPU and GPU each own their own RAM. They do not share one address space, and that single fact shapes all of CUDA. 🧠
What an Address Means
A pointer is just a number naming a slot in memory. That slot only makes sense in the address space where it was created.
Host Pointers Are Local
A pointer from malloc names host memory. The GPU has no such slot, so handing it to a kernel points nowhere valid.
int* h = (int*)malloc(n * sizeof(int));Device Pointers Are Local Too
A pointer from cudaMalloc names device memory. The CPU cannot read it directly; dereferencing it on the host crashes.
int* d;
cudaMalloc(&d, n * sizeof(int));The Classic Mistake
Passing a host pointer into a kernel compiles fine but fails at runtime. The number is valid; the memory it names is not on the GPU.
Why It Compiles Anyway
Both pointers look like the same type to C++, so the compiler stays silent. The mismatch only bites when the GPU touches the address.
Bridging with cudaMemcpy
To move data between spaces you must copy it explicitly with cudaMemcpy. There is no automatic sharing across the divide.
cudaMemcpy(d, h, bytes, cudaMemcpyHostToDevice);A Naming Convention Helps
Many programmers prefix host pointers with h_ and device pointers with d_. It is a habit that prevents painful mix-ups.
float *h_a, *d_a;Kernels See Device Space
Inside a kernel every pointer you dereference must live in device memory. That is the only space the GPU threads can reach.
Unified Memory Hint
Later you will meet unified memory, one pointer valid on both sides. For now, keep host and device pointers strictly apart.
The Mental Model
Picture two rooms with no shared shelves. To use data in the other room you must carry a copy over, never just point across.
Quick Check
Let us confirm you understand separate address spaces.
Recap
You learned host and device live in separate address spaces, pointers are not interchangeable, and cudaMemcpy is how data crosses the gap. ✅
الأسئلة الشائعة
هل درس «مساحات عناوين منفصلة» مجاني؟
نعم — نص درس «مساحات عناوين منفصلة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة CUDA Academy، انتقل إلى CoddyKit PRO. تتضمن دورة CUDA Academy 4 دروس في المجموع.
ماذا ستتعلم في «مساحات عناوين منفصلة»؟
لماذا يكون مؤشر المضيف غير صالح على الجهاز. تتمرن على CUDA Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ CUDA Academy؟
لا تُشترط خبرة سابقة. CUDA Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «مساحات عناوين منفصلة»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس CUDA Academy هذا؟
نعم. كل درس في CUDA Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- مؤهّل الدالة __global__
- دوال __device__ و__host__
- مساحات عناوين منفصلة
- دورة حياة برنامج CUDA