दो अलग-अलग लूप में एलिमेंट-वाइज जोड़ एक संयुक्त लूप से तेज़ क्यों काम करता है?
सभी को नमस्कार! मैं C++ में कुछ महीनों से लिख रहा हूँ, और मुझे प्रदर्शन का एक बहुत अजीब व्यवहार मिला। दो arrays हैं: `a` और `b` जिनका आकार 200000000 एलिमेंट है (लगभग 800 MB प्रत्येक)। मैं उन्हें एलिमेंट-वाइज जोड़कर परिणाम array `c` में स्टोर करना चाहता हूँ, और फिर `c` के प्रत्येक एलिमेंट को 2 से गुणा करके `d` में स्टोर करना चाहता हूँ।
मैंने कोड के दो वेरिएंट लिखे:
**वेरिएंट 1 (दो अलग-अलग लूप):**
```cpp
for (int i = 0; i < n; ++i) {
c[i] = a[i] + b[i];
}
for (int i = 0; i < n; ++i) {
d[i] = c[i] * 2;
}
```
**वेरिएंट 2 (एक संयुक्त लूप):**
```cpp
for (int i = 0; i < n; ++i) {
c[i] = a[i] + b[i];
d[i] = c[i] * 2;
}
```
मुझे उम्मीद थी कि दूसरा वेरिएंट तेज़ होगा, क्योंकि यह सब कुछ एक ही पास में करता है। लेकिन व्यवहार में (कंपाइलर MSVC, फ्लैग /O2, आर्किटेक्चर x64) पहला वेरिएंट **लगभग दोगुनी गति से** काम करता है! ऐसा क्यों? आखिर दूसरे वेरिएंट में इंडेक्स ऑपरेशन कम हैं और बाउंड चेक भी कम हैं। कृपया समझाएँ कि अंदर क्या हो रहा है। क्या यह संबंधित है