, निम्नलिखित कोड का टुकड़ा, एकल के एक तीन आयामी सरणी के एक ट्रेवर्सल, निष्पादन दक्षता के मामले में विचार करें यह सोचते हैं कि process1()
और process2()
समय की समान लंबाई ले निष्पादित करने के लिए:.NET कंपाइलर - क्या नेस्टेड लूप ऑप्टिमाइज़ेशन अंतर्निहित हैं?
float arr[mMax,nMax,oMax];
for (m = 0; m < mMax; m++)
for (n = 0; n < nMax; n++)
for (o = 0; o < oMax; o++)
{ process1(arr[m,n,o]); }
for (o = 0; o < oMax; o++)
for (n = 0; n < nMax; n++)
for (m = 0; m < mMax; m++)
{ process2(arr[m,n,o]); }
अब, यह है कि जाना जाता है सी # पंक्ति-प्रमुख संरचनाओं के रूप में .NET ढांचे में सरणी व्यवस्थित करता है। किसी भी अनुकूलन के बिना मैं मानता हूं कि पहला लूप दूसरे की तुलना में बहुत तेज निष्पादित करेगा।
सवाल यह है: क्या सीएलआर के जेआईटी या cs.exe/vb.exe कंपाइलर्स इस तरह के लूप का पता लगाते हैं और अनुकूलित करते हैं, शायद घोंसले की पुनरावृत्ति करते हैं, या मुझे हमेशा संभावित प्रदर्शन हिट के लिए अपने गार्ड पर रहना चाहिए, खासकर शब्दों में अगर मैं लूप को समानांतर करने की कोशिश करता हूं तो क्या हो सकता है?
सामान्य स्थिति में आपको संकलक अनुकूलन – oakio