प्रोग्रामिंग के प्रदर्शन और प्रदर्शन ट्यूनिंग पर काम करने वाले लोगों के लिए एक सामान्य प्रश्न के रूप में, आप कैसे पता लगाते हैं कि आपका कोड सीपीयू बाध्य है या मेमोरी बाध्य है? मैं सामान्य रूप से इन अवधारणाओं को समझता हूं, लेकिन यदि मैंने कहा है, 'वाई' भार और भंडार और '2y' गणनाओं की मात्रा, बाधा क्या है, यह जानने के लिए कोई कैसे जाता है?समझें कि कोड नमूना सीपीयू बाध्य है या मेमोरी बाध्य
क्या आप यह भी पता लगा सकते हैं कि आप वास्तव में अपना अधिकांश समय कहां खर्च कर रहे हैं और कहें, यदि आप प्रत्येक लूप पुनरावृत्ति में कैश (यदि इसकी स्मृति बाध्य) में डेटा की 'x' मात्रा लोड करते हैं, तो आपका कोड तेज़ी से चलाएगा ? क्या परीक्षण और त्रुटि के अलावा, 'x' निर्धारित करने का कोई सटीक तरीका है?
क्या कोई उपकरण है जिसका उपयोग आप करेंगे IA-32 या IA-64 आर्किटेक्चर पर कहें? Doest VTune मदद करते हैं?
उदाहरण के लिए, मैं वर्तमान में कर रहा हूँ निम्नलिखित:
मैं जटिल युगल के 26 8 * 8 मैट्रिक्स है और मैं के साथ एक MVM (मैट्रिक्स वेक्टर गुणा) (~ 4000) लंबाई 8 की वैक्टर प्रदर्शन करने के लिए है , इन 26 मैट्रिक्स में से प्रत्येक के लिए। मैं जटिल गुणा करने के लिए एसएसई का उपयोग करता हूं।
/*Copy 26 matrices to temporary storage*/
for(int i=0;i<4000;i+=2){//Loop over the 4000 vectors
for(int k=0;k<26;k++){//Loop over the 26 matrices
/*
Perform MVM in blocks of '2' between kth matrix and
'i' and 'i+1' vector
*/
}
}
26 मैट्रिक्स 26kb ले (एल 1 कैश 32 केबी है) और मैं स्मृति में बाहर वैक्टर रखा है ऐसा है कि मैं stride'1 है 'तक पहुँचता है। एक बार जब मैं 27 मैट्रिक्स के साथ वेक्टर पर एमवीएम करता हूं, तो मैं उनसे फिर से नहीं जाता, इसलिए मुझे नहीं लगता कि कैश अवरोधन मदद करेगा। मैंने वेक्टरेशन का उपयोग किया है लेकिन मैं अभी भी शीर्ष प्रदर्शन के 60% पर अटक गया हूं।
मैंने बाहरी लूप के हर पुनरावृत्ति के लिए अस्थायी भंडारण में 64 वैक्टरों की प्रतिलिपि बनाने की कोशिश की, यह सोचने की कोशिश की कि वे कैश और सहायता में होंगे, लेकिन इसका केवल कम प्रदर्शन होगा। मैंने निम्नलिखित तरीके से _mm_prefetch() का उपयोग करने की कोशिश की: जब मैं लगभग आधा मैट्रिस के साथ किया जाता हूं, तो मैं अगली 'i' और 'i + 1' वेक्टर को स्मृति में लोड करता हूं, लेकिन इससे भी मदद नहीं मिली है।
मैंने यह सब अपनी याददाश्त को संभालने के लिए किया है लेकिन मैं निश्चित रूप से जानना चाहता हूं। क्या उधर रास्ता है?
आप किस ओएस का उपयोग कर रहे हैं? – amdn
लिनक्स। लेकिन ओएस इस मामले में कैसे मायने रखता है? मैं इसे जॉब शेड्यूलिंग का उपयोग करके क्लस्टर पर चला रहा हूं, इसलिए कोई अन्य प्रक्रिया चल रही नहीं है .. – user1715122
मैं उत्सुक हूं, क्या आपने 'perf' का उपयोग करने का प्रयास किया है? – amdn