إلغاء تبديل الحلقة
يُعدّ فصل التكرارات عن الحلقة تحسينًا للمُصرّف . فهو ينقل عبارة شرطية داخل الحلقة إلى خارجها عن طريق تكرار جسم الحلقة ووضع نسخة منه داخل كلٍّ من شرطي if و else. [ 1 ] يُحسّن هذا من توازي تنفيذ الحلقة. وبما أن المعالجات الحديثة قادرة على التعامل مع المتجهات بكفاءة، فإن هذا التحسين يزيد من سرعة البرنامج.
إليك مثال بسيط. لنفترض أننا نريد جمع المصفوفتين x و y ، بالإضافة إلى إجراء عملية ما بناءً على المتغير w . لدينا الكود التالي بلغة C :
bool w ; int x [ 1000 ]; int y [ 1000 ]; for ( int i = 0 ; i < 1000 ; i ++ ) { x [ i ] += y [ i ]; if ( w ) { y [ i ] = 0 ; } }يُصعّب الشرط الموجود داخل هذه الحلقة تنفيذ هذه الحلقة بالتوازي بأمان. عند إلغاء الشرط، تصبح الحلقة على النحو التالي:
bool w ; int x [ 1000 ]; int y [ 1000 ]; if ( w ) { for ( int i = 0 ; i < 1000 ; i ++ ) { x [ i ] += y [ i ]; y [ i ] = 0 ; } } else { for ( int i = 0 ; i < 1000 ; i ++ ) { x [ i ] += y [ i ]; } }على الرغم من أن إلغاء تبديل الحلقة قد يضاعف كمية التعليمات البرمجية المكتوبة، إلا أنه يمكن الآن تحسين كل حلقة من هذه الحلقات الجديدة بشكل منفصل.
تم إدخال خاصية إلغاء تبديل الحلقة في gcc في الإصدار 3.4. [ 2 ]
مراجع
- ↑ كوبر، كيث؛ توركزون، ليندا (2004). هندسة المترجم . إلسيفير. ISBN 9781558606982.
- ↑ "سلسلة إصدارات GCC 3.4 - التغييرات والميزات الجديدة والإصلاحات - مشروع جنو" .
- تحسينات المُترجم
