تقنية

دمج عمليتين: هل عدم حفظ الوسيط يغير الحساب؟

مسار المدخل اثنين إلى وسيط سبعة ثم نهائي ثلاثة وثلاثين، ومسار تعبير مركب يعطي النهائي نفسه في الحساب المعلن
الاعتماد الحسابي محفوظ؛ الرسم لا يصف ذاكرة أو نواة قسناها.

دمج العمليات والقيمة الوسيطة يصفان طريقة تنفيذ الحساب. يعرض OpenXLA دمج عمليات في نواة واحدة وتمرير نتائجها الوسيطة دون كتابتها إلى الذاكرة الخارجية في مثاله. [1] هذا لا يسمح باستبدال وظيفة الحساب اعتباطيا.

الخلاصة السريعة

عدم تخزين الوسيط خارج خطوة التنفيذ لا يلزم أن يغير الدالة؛ المهم حفظ اعتماد العملية التالية على النتيجة المطلوبة، مع شروط الحساب المحددة.

  • في مثال XLA الموثق تدمج عمليات في نواة واحدة وتبقى النتائج الوسيطة في سجلات GPU بدل كتابتها إلى الذاكرة الخارجية. [1]
  • في حسابنا الدقيق، الأولى تضاعف المدخل وتضيف 3، والثانية تضرب نتيجتها في 4 وتضيف 5؛ عند المدخل 2 يكون الوسيط 7 والنهائي 33.
  • التعبير المركب 8 × المدخل + 17 يعطي 33 تحت حسابنا نفسه؛ عكس العمليتين يعطي 29، فاختفاء تخزين الوسيط لا يعني تبديل الترتيب.
  • إذا احتاج مستهلك آخر إلى الوسيط، فهو مخرج مطلوب في عقد المثال. لم نجمع نموذجا أو نقس الذاكرة، ولا يثبت الجبر وحده تطابق البتات في حساب عائم.

ما الذي يختفي في المثال الموثق؟

يوضح OpenXLA دمج ضرب وجمع واختزال في نواة GPU واحدة، وتمرير القيم الوسيطة داخل السجلات دون كتابتها إلى الذاكرة الخارجية. [1]

نميز بين وجود نتيجة يعتمد عليها الحساب ووجود نسخة مكتوبة في مساحة خارج تلك الخطوة. الحساب التالي يحتاج القيمة المناسبة؛ لكنه لا يلزم في كل وصف حسابي أن يستلمها من ملف أو مخزن مستقل. لذلك كلمة «وسيط» لا تعني دائما مخرجا محفوظا يراه المستخدم.

لا نقول إن كل رسم لأي نموذج سيُدمج بهذا الشكل. ما قرأناه مثال محدد في دليل، وما سنحسبه الآن تمرين مستقل يشرح الاعتماد بين دالتين، وليس وصفا لما أنشأه مجمع فعلي.

تتبع قيمة من عمليتين إلى جواب

نعرّف الأولى في ورقتنا: ضاعف س ثم أضف 3. ونعرف الثانية: اضرب المدخل الذي يصلها في 4 ثم أضف 5. نعتمد حسابا عدديا دقيقا بلا تقريب، ونعطي العملية الثانية ناتج الأولى.

عندما س = 2، ينتج 2 × 2 + 3 = 7. يصل 7 إلى الثانية فتنتج 4 × 7 + 5 = 33. نسمي 7 وسيطا لأننا لم نختره جوابا نهائيا. لا يعني ذلك أنه لم يوجد أو أن الثانية عملت مباشرة على المدخل الأصلي.

يمكن في وصفنا المركب كتابة 4 × (2س + 3) + 5، ثم تبسيطه إلى 8س + 17. عند س = 2 نحصل على 33 أيضا. التبسيط تحقق جبري للدالة التي أعلنّاها، وليس تقريرا عن شيفرة GPU أو مخزن وفرناه.

لماذا لا نستبدل ترتيب الدالتين؟

نبدأ هذه المرة بالثانية على المدخل الأصلي 2: نحصل على 4 × 2 + 5 = 13. ثم نمرر 13 إلى الأولى: 2 × 13 + 3 = 29. تغيرت الدالة التي طبقناها، لذا اختلف الجواب من 33 إلى 29.

الجمع بين خطوات التنفيذ لا يمنحنا حق تبديل اعتماد كل خطوة. في الورقة الأولى تستخدم الثانية نتيجة الأولى؛ وفي الورقة المعكوسة تستخدم الأولى نتيجة الثانية. ترسم الأسهم هذه العلاقة، لا مجرد مواضع صناديق يمكن تبديلها دون أثر.

ولا نستنتج من الجبر ضمان تطابق كل بت عند تغيير تنفيذ عائم حقيقي. لم نحدد نوعه أو قواعد التقريب فيه أو طريقة مجمع بعينه. المقارنة الدقيقة في ورقتنا محدودة بالافتراض العددي المعلن.

ماذا لو كان الوسيط مطلوبا أيضا؟

نفترض الآن أن شاشة المثال تطلب الجواب النهائي والوسيط معا. عند المدخل 2 تصبح بطاقة النتيجة المطلوبة قيمتين: 7 و 33. لم يعد إرجاع 33 وحده يفي بهذا العقد، حتى لو أدى الحساب النهائي على نحو صحيح.

هذا شرط صنعناه لتوضيح الفرق بين وسيط داخلي وقيمة يحتاجها مستهلك مستقل. عند مراجعة تحويل، نذكر المخرجات المطلوبة قبل الحديث عن اختفاء كتابة بعضها. لا نسمي إخراجا محذوفا تحسينًا إذا كان المستخدم يحتاجه وفق المهمة المعلنة.

لم ننفذ XLA أو نقس استهلاك ذاكرة. الرسم يتتبع الوسيط والنهائي في التمرين، ويضع التعبير المركب إلى جانب المسار نفسه. ما نتحقق منه هنا الوظيفة المطلوبة وترتيب الاعتماد، وتبقى جودة التنفيذ الحقيقي مسألة تحتاج فحصا مستقلا.

المصادر ومتابعة القراءة

  1. OpenXLA: XLA Optimizing Compiler for Machine Learning (يفتح في نافذة جديدة)openxla.org

أُعدّ هذا المقال بصياغة عربية أصلية بالاستناد إلى المصادر أعلاه، وهو مدخل تمهيدي إلى الموضوع. اقرأ منهجية المحتوى وحدوده.