حركة الكود غير المتغيرة للحلقة

في برمجة الحاسوب ، يتألف الكود غير المتأثر بالحلقات من عبارات أو تعابير (في لغات البرمجة الإجرائية ) يمكن نقلها خارج جسم الحلقة دون التأثير على دلالات البرنامج. وتُعرف عملية نقل الكود غير المتأثر بالحلقات (وتُسمى أيضًا الرفع أو الترقية العددية ) بأنها تحسينٌ للمترجم يُنفذ هذه العملية تلقائيًا.

مثال

في نموذج الكود التالي، يمكن تطبيق تحسينين.

int i = 0 ; while ( i < n ) { x = y + z ; a [ i ] = 6 * i + x * x ; ++ i ; }

على الرغم من أن الحساب x = y + zثابت x * xداخل الحلقة، إلا أنه يجب اتخاذ الاحتياطات اللازمة قبل نقل الكود خارج الحلقة. من الممكن أن يكون شرط الحلقة غير صحيح false(على سبيل المثال، إذا nكانت قيمة المتغير سالبة)، وفي هذه الحالة، يجب عدم تنفيذ جسم الحلقة على الإطلاق. إحدى طرق ضمان السلوك الصحيح هي استخدام فرع شرطي خارج الحلقة. قد يكون لتقييم شرط الحلقة آثار جانبية ، لذا يجب تعويض التقييم الإضافي بواسطة ifالبنية باستبدال whileالحلقة بـ do {} while. إذا تم استخدام الكود do {} whileفي المقام الأول، فلن تكون عملية الحماية بأكملها ضرورية، حيث يُضمن تنفيذ جسم الحلقة مرة واحدة على الأقل.

int i = 0 ; if ( i < n ) { x = y + z ; int const t1 = x * x ; do { a [ i ] = 6 * i + t1 ; ++ i ; } while ( i < n ); }

يمكن تحسين هذا الكود بشكل أكبر. على سبيل المثال، يمكن تقليل قوة الكود بإزالة عمليتي الضرب داخل الحلقة ( 6*iو a[i])، ثم يمكن حذف متغيرات الاستقراءi تمامًا. بما أن 6 * iيجب أن تكون متزامنة مع iنفسها، فلا حاجة لوجود كلتيهما.

الكشف عن الرموز الثابتة

عادةً ما يتم استخدام تحليل تعريفات الوصول للكشف عما إذا كانت العبارة أو التعبير ثابتًا في الحلقة.

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

استخدم مويان وروبيانو وسيلر تحليل تبعية تدفق البيانات [ 1 ] للكشف ليس فقط عن الأوامر الثابتة، بل أيضًا عن أجزاء برمجية أكبر حجمًا، مثل حلقة داخلية. كما يكشف التحليل عن شبه الثوابت ذات الدرجات المختلفة، أي الأوامر أو أجزاء التعليمات البرمجية التي تصبح ثابتة بعد عدد محدد من تكرارات جسم الحلقة. وقد استخدم أوبير وروبيانو وروش وسيلر هذه التقنية لاحقًا لموازاة الحلقات تلقائيًا. [ 2 ]

فوائد

يتم تنفيذ التعليمات البرمجية غير المتأثرة بالحلقات، والتي تم رفعها خارج الحلقة، بوتيرة أقل، مما يُحسّن سرعة التنفيذ. ومن الآثار الأخرى لهذا التحويل إمكانية تخزين الثوابت في المسجلات دون الحاجة إلى حساب العنوان والوصول إلى الذاكرة (أو سطر التخزين المؤقت) في كل تكرار.

مع ذلك، إذا تم إنشاء عدد كبير جدًا من المتغيرات، فسيؤدي ذلك إلى ضغط كبير على المسجلات ، خاصةً في المعالجات ذات المسجلات القليلة، مثل معالجات x86 ذات 32 بت . إذا نفدت المسجلات لدى المُصرّف، فسيتم تخزين بعض المتغيرات في الذاكرة المؤقتة. ولمعالجة هذه المشكلة، يمكن إجراء عملية التحسين العكسي، أي إعادة التخصيص .

انظر أيضاً

للمزيد من القراءة

  • أهو، ألفريد ف.؛ سيثي، رافي؛ وأولمان، جيفري د. (1986). المترجمات: المبادئ والتقنيات والأدوات. أديسون ويسلي. ISBN 0-201-10088-6.

مراجع

  1. مويان، جان إيف؛ روبيانو، توماس؛ سيلر، توماس (2017). "الكشف عن أجزاء شبه ثابتة في الحلقات". التكنولوجيا الآلية للتحقق والتحليل . سلسلة محاضرات في علوم الحاسوب. المجلد 10482. الصفحات 91-108 . doi : 10.1007/978-3-319-68167-2_7 . ISBN   978-3-319-68166-5.
  2. أوبير، كليمنت؛ روبيانو، توماس؛ روش، نيا؛ سيلر، توماس (2023). "توزيع وموازاة الحلقات غير التقليدية". التحقق، والتحقق من النموذج، والتفسير المجرد . سلسلة محاضرات في علوم الحاسوب. المجلد 13881. الصفحات 91-108 . doi : 10.1007/978-3-031-24950-1_1 .  
  • تحسينات المُصرّف - رفع التعليمات البرمجية