के लिए समांतर योग कृपया कोई सुझाव दे सकता है कि मैं मल्टीथ्रेडिंग के माध्यम से लूप के रनटाइम के लिए निम्न को कैसे कम कर सकता हूं? मान लीजिए कि मेरे पास 'ए' और 'बी' नामक दो वैक्टर भी हैं।वेक्टर
for (int j = 0; j < 8000; j++){
// Perform an operation and store in the vector 'a'
// Add 'a' to 'b' coefficient wise
}
लूप के लिए यह मेरे कार्यक्रम में कई बार निष्पादित किया जाता है। उपरोक्त लूप में दो ऑपरेशन पहले ही अनुकूलित किए गए हैं, लेकिन वे केवल एक कोर पर चलते हैं। हालांकि, मेरे पास 16 कोर उपलब्ध हैं और उनका उपयोग करना चाहते हैं।
मैंने निम्नानुसार लूप को संशोधित करने का प्रयास किया है। वेक्टर 'ए' रखने के बजाय, मेरे पास 16 वैक्टर हैं, और मान लीजिए कि i-th को एक [i] कहा जाता है। मेरे लिए पाश अब लग रहा है
तरहfor (int j = 0; j < 500; j++){
for (int i = 0; i < 16; i++){
// Perform an operation and store in the vector 'a[i]'
}
for (int i = 0; i < 16; i++){
// Add 'a[i]' to 'b' coefficient wise
}
}
मैं OpenMP में से प्रत्येक पर छोरों के लिए अंदर 'के लिए #pragma omp समानांतर' जोड़कर का उपयोग आंतरिक छोरों से प्रत्येक से पहले। मेरे सभी प्रोसेसर उपयोग में हैं लेकिन मेरा रनटाइम केवल महत्वपूर्ण रूप से बढ़ता है। क्या किसी के पास इस लूप के रनटाइम को कम करने के बारे में कोई सुझाव है? पहले ही, आपका बहुत धन्यवाद।
क्या आपने यह पता लगाने के लिए अपना कोड प्रोफाइल किया है कि बाधाएं कहां हैं? – GWW
ऐसा इसलिए हो सकता है क्योंकि शायद आपको अनुकूलित करने के बाद कोड को छोटे टुकड़ों में तोड़ा नहीं जा सकता है, यदि आपका मूल केवल 'a [i] + = b [i]' जैसा कुछ कर रहा था तो आप उस प्रगामा टैग को उसके ठीक पहले जोड़ सकते हैं के लिये। यह आपके प्रदर्शन को बढ़ावा देगा जैसा आप चाहते थे। – Ali1S232
यदि आपके लूप का शरीर वास्तव में तुच्छ है, तो आप शायद अपनी याददाश्त की बैंडविड्थ से बाधित हैं, और अधिक कोर मदद नहीं करेंगे (क्योंकि मेमोरी बैंडविड्थ पहले ही संतृप्त है)। लूप के अंदर करने के लिए और अधिक काम खोजने के लिए उच्च स्तर पर फिर से व्यवस्थित करें, या तेज रैम वाली मशीन प्राप्त करें। – Nemo