संकलक अनुकूलन के बिना
, पहली पाश इस तरह विधानसभा कोड को जाता है:
@@:
cmp ... ; or test ...
jz @f
...
jmp @b
जबकि दूसरा पाश कुछ इस तरह के लिए चला जाता:
jmp bottom
@@:
...
bottom:
cmp ... ; or test ...
jz @b
सशर्त छलांग आमतौर पर लिया जाना का पूर्वानुमान लगाया इसलिए पहली विधि संभावित रूप से अधिक पाइपलाइन/निर्देश कैश फ्लश का कारण बन सकती है।
हालांकि, सबसे महत्वपूर्ण बात यह है कि पहले लूप के लिए, प्रति लूप पुनरावृत्ति (2N
) पर दो शाखाएं उपलब्ध हैं, जबकि दूसरी तरफ, प्रत्येक लूप पुनरावृत्ति में केवल एक शाखा है जो पहले बिना शर्त कूद के एक निश्चित ओवरहेड के साथ होती है (N+1
)।
लूप अनुकूलन के बारे में अधिक जानकारी के लिए, इस assembly optimisation guide के पृष्ठ 88 देखें।
स्रोत
2012-03-20 00:25:03
वास्तव में, दूसरा पाश लूप के शीर्ष पर स्थिति का मूल्यांकन नहीं करता है। यह थोड़ी देर तक कूद जाता है, जहां यह जारी रहता है जैसे कि यह अभी एक पुनरावृत्ति समाप्त कर चुका है। शाखा भविष्यवाणीकर्ता का जिक्र करने के लिए –