2010-05-21 18 views
11

सामान्य रूप से (या आपके अनुभव से), लूप के लिए प्रदर्शन के दौरान प्रदर्शन में अंतर है?सी ++ प्रदर्शन, बनाम

क्या होगा अगर वे दोगुनी/तीन गुना हो?

क्या वेक्टरेशन (एसएसई) जी ++ या इंटेल कंपाइलर्स में लूप संस्करण से प्रभावित है?

वास्तव में उन दोनों के बीच एक अंतर को नहीं दिखाएंगे

+0

मुझे खुशी है कि आप केवल अस्थायी रूप से अपंग हो रही है। मैं स्थायी रूप से हूं, और मुझे लगता है कि यह मुझे एक विरोधाभासी क्रैंक का थोड़ा सा बनाता है। मैं केवल बॉक्स के बाहर नहीं हूं, मुझे * बॉक्स * में नहीं मिल सकता है। वैसे भी, यदि आप गंभीर अनुकूलन करते हैं, तो मैं यह दिखाने का प्रयास करता हूं कि आप कैसे दिखा सकते हैं कि आप इस तरह की चीजें केवल प्रदर्शन ट्यूनिंग के बहुत ही अंत चरण में अंतर डालते हैं। तुम्हारी पढ़ाई के लिए शुभकामनाएं। –

+0

@ माइक धन्यवाद। आपके बारे में सुनने के लिए खेद है। दुख की बात यह है कि एक व्यक्ति को कई चीजों को मंजूरी मिलती है और फिर यह महसूस होता है कि वे उन्हें खोने के बाद कितना महत्वपूर्ण हैं :-( – Anycorn

उत्तर

13

Here विषय पर एक अच्छा पेपर है।

+1

मुझे लगता है कि यह अनुच्छेद इसे सब कुछ सुन्दर तरीके से बताता है: "* अनुकूलन == महत्वपूर्ण। लेकिन अक्सर: पढ़ने योग्य कोड == और महत्वपूर्ण। * " मैं पुनरावृत्ति के लिए 'लूप' का पक्ष लेता हूं क्योंकि यह स्पष्ट है कि आपके लूप चर को प्रारंभ किया जा रहा है और बढ़ाया गया है या घटाया गया है। – Johnsyweb

9

किसी भी बुद्धिमान संकलक धन्यवाद। for लूप वास्तव में while लूप के किसी निश्चित रूप के लिए सिंटैक्टिक चीनी है, वैसे भी।

1

यह नगण्य होना चाहिए। एक अनुकूलन कंपाइलर को भेदभाव को निर्विवाद बनाना चाहिए।

1

यह आसानी से अलग-अलग हिस्सों को देखकर पता लगाया गया है। अधिकांश लूपों के लिए, वे वही काम करेंगे जो आप एक ही काम करते हैं।

int i = 0; 
while (i < 10) 
    ++i; 

रूप

for (int i = 0; i < 10; ++i) 
    ; 

ही है जैसा कि घोंसले के लिए, यह वास्तव में आप इसे कैसे कॉन्फ़िगर पर निर्भर करता है, लेकिन एक ही सेट अप एक ही कोड उपज चाहिए।

1

शून्य अंतर होना चाहिए, लेकिन जांच करें क्योंकि मैंने वास्तव में क्रैपी देखा है, जीसीसी के पुराने संस्करण दोनों के बीच अलग कोड एआरएम/थंब कोड बनाते हैं। एक ने शून्य झंडा सेट करने के लिए एक घटाव के बाद एक तुलना को अनुकूलित किया जहां दूसरे ने नहीं किया। बहुत लंगड़ा था।

घोंसला फिर से कोई फर्क नहीं पड़ता। एसएसई/वेक्टरिज़ेशन सामान पर निश्चित नहीं है, लेकिन फिर से मैं उम्मीद करता हूं कि कोई फर्क नहीं पड़ता।

0

VS2015, इंटेल जिऑन सीपीयू

long long n = 1000000000; 
int *v = new int[n]; 
int *v1 = new int[2*n]; 

start = clock(); 
for (long long i = 0, j=0; i < n; i++, j+=2) 
    v[i] = v1[j]; 
end = clock(); 
std::cout << "for1 - CPU time = " << (double)(end - start)/CLOCKS_PER_SEC << std::endl; 

p = v; pe = p + n; p1 = v1; 
start = clock(); 
while (p < pe) 
{ 
    *p++ = *p1; 
    p1 += 2; 
} 
end = clock(); 
std::cout << "while3 - CPU time = " << (double)(end - start)/CLOCKS_PER_SEC << std::endl; 

for1 - CPU समय = 4,055

while3 - CPU समय = 1,271

संबंधित मुद्दे