ठीक है, सब से पहले, मुझे पता नहीं कैसे compilers यह स्वचालित रूप से करता है। और मुझे पूरा यकीन है कि कम से कम 10s हैं यदि 100 से अधिक एल्गोरिदम नहीं हैं जिन्हें कंपेलरों को चुनना है।
और यह शायद संकलक-विशिष्ट है वैसे भी।
लेकिन, मैं इसकी प्रभावशीलता की गणना करने में आपकी सहायता कर सकता हूं।
बस ध्यान दें कि इस तकनीक को आम तौर पर आप एक महान प्रदर्शन को बढ़ावा देने नहीं देता है।
लेकिन बार-बार लूप गणना में और उच्च प्रतिशत प्रदर्शन दे सकता है।
ऐसा इसलिए है क्योंकि आमतौर पर लूप के अंदर फ़ंक्शन लूप की स्थिति जांच से अधिक गणना समय लेता है।
तो, मान लीजिए कि हम, एक निरंतर के साथ एक सरल पाश है क्योंकि आप भी कॉपी-पेस्ट करने के लिए आलसी थे या सिर्फ यह लगेगा सोचा बेहतर:
for (int i = 0; i < 5; i++)
{
DoSomething();
}
यहाँ आप पूर्णांक तुलना है , incrementations, और DoSomethig() कॉल।
तो अगर DoSomething() अपेक्षाकृत जल्दी है, तो हम संचालन मिला है।
DoSomething();
DoSomething();
DoSomething();
DoSomething();
DoSomething();
अब स्थिरांक यह आसान है के साथ
, इसलिए की सुविधा देता है देखें कि यह कैसे एक चर के साथ काम करेगा:
अब अगर आप इस उतारना होगा, आप इसे सिर्फ 5 संचालन करने के लिए कम कर देंगे
for (int i = 0; i < n; i++)
{
DoSomething();
}
यहाँ आप n पूर्णांक तुलना, n incrementations, और n DoSomethig() कॉल = 3n है। अब, हम इसे पूरी तरह से नहीं उतारना कर सकते हैं, लेकिन हम एक निरंतर कारक (उच्च n होने की उम्मीद है, और अधिक हम इसे उतारना चाहिए) द्वारा इसे उतारना सकता है: यहाँ
int i;
for (i = 0; i < n; i = i+3)
{
DoSomething();
DoSomething();
DoSomething();
}
if (i - n == 2)
{
DoSomething(); // We passed n by to, so there's one more left
}
else if (i - n == 1)
{
DoSomething(); //We passed n by only 1, so there's two more left
DoSomething();
}
अब हमारे पास यहाँ आप n/3 + 2 पूर्णांक तुलना, n/3 incrementations, और n DoSomethig() कॉल = (1 2/3) * n है।
हमने खुद को (1 1/3) * एन संचालन बचाया। जो लगभग आधा गणना गणना समय में कटौती करता है।
एफवाईआई, एक और साफ अनोलिंग तकनीक को Duff's device कहा जाता है।
लेकिन यह बहुत संकलक और भाषा-कार्यान्वयन विशिष्ट है। ऐसी भाषाएं हैं जहां यह वास्तव में बदतर होगी।
क्या आप संकलक अनुकूलन विश्लेषण पर एक पेपर ढूंढ रहे हैं? :) – Jon
मैं जोड़ना चाहता हूं: जीसीसी का सहायता संदेश क्यों कहता है -फनोल-ऑल-लूप वास्तव में प्रोग्राम को धीमा कर देता है? उद्धरण: "लूप अनोलिंग के अनुकूलन को निष्पादित करें। यह सभी लूपों के लिए किया जाता है और आमतौर पर प्रोग्राम धीरे-धीरे चलते हैं।" – BlackBear
@ जोन, इससे कोई फर्क नहीं पड़ता, मुझे बस एक अच्छा जवाब चाहिए। –