0Pricing
Mojo Academy · درس

توجيه حلقة باستخدام المتجهات

حوّل حلقة عددية إلى عمل متجهي

توجيه حلقة باستخدام المتجهات درس مجاني في Mojo Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Mojo Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Mojo Academy 4 دروس في المجموع.

بعض أجزاء هذا الدرس لم تُترجم بعد وتظهر باللغة الإنجليزية.

The Scalar Loop

A plain loop touches one element per step. It is clear but leaves your CPU's vector lanes mostly unused.

for i in range(n):
    out[i] = a[i] + b[i]

The Vector Idea

Vectorizing means each loop step handles a whole pack of elements instead of one. You do more work per iteration.

Load a Chunk

Instead of one value, you load several at once into a SIMD vector. That single load grabs a slice of your data.

var chunk = a.load[width=4](i)

Compute the Whole Chunk

With both chunks in SIMD form, add them in one element-wise step. The math covers every lane at once.

var sum = a.load[width=4](i) + b.load[width=4](i)

Store the Result

Write the whole SIMD result back in one move with a vector store. One write covers all the lanes you computed.

out.store[width=4](i, sum)

Step by the Width

A vectorized loop advances by the width, not by one. Each pass covers a full pack of elements.

for i in range(0, n, 4):
    pass

Let Mojo Drive It

Mojo's vectorize helper runs a closure across the range in vector steps and handles the bookkeeping for you.

from algorithm import vectorize

A vectorize Closure

You write a small parameterized function that processes one chunk. Mojo calls it with the right width as it sweeps the range.

fn work[w: Int](i: Int):
    out.store[width=w](i, a.load[width=w](i) + b.load[width=w](i))

Run the Vectorize

Call vectorize with your chunk function, the width, and the total size. It does the looping and the tail for you.

vectorize[work, 4](n)

Same Result, Far Faster

The vectorized loop gives identical output to the scalar one but moves through data in big steps, so it finishes sooner.

Measure to Confirm

Always time both versions. Vectorization usually wins big, but a benchmark proves the gain on your real data.

Quick Check

You replace a one-element-per-step loop with SIMD loads and stores. How should the loop advance?

Recap

Vectorizing loads and stores whole chunks, steps by the width, and lets vectorize handle the sweep and tail, giving the same result far faster. 🚀

الأسئلة الشائعة

هل درس «توجيه حلقة باستخدام المتجهات» مجاني؟

نعم — نص درس «توجيه حلقة باستخدام المتجهات» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Mojo Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Mojo Academy 4 دروس في المجموع.

ماذا ستتعلم في «توجيه حلقة باستخدام المتجهات»؟

حوّل حلقة عددية إلى عمل متجهي تتمرن على Mojo Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Mojo Academy؟

لا تُشترط خبرة سابقة. Mojo Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.

كم من الوقت يستغرق درس «توجيه حلقة باستخدام المتجهات»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Mojo Academy هذا؟

نعم. كل درس في Mojo Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. التعرّف على نوع SIMD
  2. حساب SIMD عنصرًا بعنصر
  3. اختيار عرض SIMD
  4. توجيه حلقة باستخدام المتجهات
← العودة إلى Mojo Academy