2013-09-30 3 views
6

मैंने हमेशा सोचा था कि शाखा विचलन केवल "अगर", "अन्य", "के लिए", "स्विच" आदि जैसे ब्रांचिंग कोड के कारण होता है। हालांकि मैंने हाल ही में एक पेपर पढ़ा है जिसमें यह कहता है:सीयूडीए में, गैर-कोलेस्ड मेमोरी एक्सेस शाखा विचलन का कारण बनता है?

" कोई स्पष्ट रूप से देख सकता है कि प्रत्येक पहले अन्वेषण-आधारित एल्गोरिदम में धागे द्वारा ली गई अलग-अलग शाखाओं की संख्या पूर्ण अन्वेषण रणनीति से कम से कम दो गुना अधिक महत्वपूर्ण है। यह आमतौर पर अतिरिक्त गैर-कोलेस्ड पहुंच से परिणाम होता है वैश्विक स्मृति इसलिए, इस तरह के धागे विचलन से कई मेमोरी एक्सेस होते हैं जिन्हें क्रमबद्ध किया जाना चाहिए, निष्पादित निर्देशों की कुल संख्या में वृद्धि।

कोई यह देख सकता है कि गैर-कोलेस्ड एक्सेस का उपयोग कर संस्करण के लिए वार्प सीरियलाइजेशन की संख्या इसके समकक्ष के मुकाबले सात से सोलह गुना अधिक महत्वपूर्ण है। दरअसल, गैर-कोलेस्ड एक्सेस के कारण एक थ्रेड विचलन कई स्मृति एक्सेसों को जन्म देता है जिन्हें क्रमबद्ध किया जाना चाहिए, निर्देशों को निष्पादित करना बढ़ाना है। "

यह की तरह लगता है लेखक के अनुसार, गैर एकत्रित पहुंच विभिन्न शाखाओं पैदा कर सकता है। यह सच? मेरा प्रश्न है, कितने कारणों वास्तव में शाखा विचलन के लिए देखते हैं है? अग्रिम धन्यवाद।

+1

क्या आप मूल संदर्भ से लिंक कर सकते हैं? – talonmies

+1

+1 मैं वास्तव में जानना चाहता हूं कि अलग-अलग शाखाओं के लिए मेमोरी एक्सेस रणनीति कैसे जिम्मेदार होगी। कृपया संदर्भ जोड़ें। –

+1

यह थीसिस संदर्भ होना चाहिए। 2 पैराग्राघ क्रमश: पी 80 और पी 107 से आते हैं। http://mistic.heig-vd.ch/luong/thesis.pdf – kangshiyin

उत्तर

3

मुझे लगता है कि लेखक अवधारणाओं और/या शब्दावली पर स्पष्ट नहीं है।

विचलन और क्रमबद्धता के दो अवधारणाओं को बारीकी से जुड़े हुए हैं। विचलन, क्रमबद्धता का कारण बनता है के रूप में एक ताना में धागे की अलग-अलग समूहों क्रमानुसार निष्पादित किया जाना चाहिए लेकिन सीरियलाइजेशन विचलन का कारण नहीं है, विचलन रेफरी के रूप में विशेष रूप से एक कोड के भीतर धागे के लिए अलग-अलग कोड पथ चलाते हैं।

अन्य चीजें जो धारावाहिकता (लेकिन विचलन नहीं) का कारण बनती हैं बैंक संघर्ष और परमाणु संचालन होते हैं।

+1

शाखा विचलन के बिना क्रमबद्धता का एक और उदाहरण __constant__ स्मृति के लिए गैर-वर्दी पहुंच होगी। – njuffa

+0

दो अवधारणाओं को साफ़ करने के लिए धन्यवाद। इसलिए एल्गोरिदम/कोड के गैर-कोलेस्ड मेमोरी एक्सेस पैटर्न में शाखा विचलन के साथ बिल्कुल कुछ नहीं है, विशेष रूप से, "शाखा दक्षता" परिणाम एनवीआईडीआईए प्रोफाइलर से प्राप्त हुआ है? – Ben

+0

@ बेन: यह सही है। CUDA प्रोफाइलर दस्तावेज़ कहते हैं: 'शाखा दक्षता = ({शाखाएं} - {अलग शाखाएं})/{शाखाएं} 'और' अलग शाखाएं = शाखाएं जिन्हें युद्ध के दौरान अलग-अलग मूल्यांकन किया गया था और 'शाखाएं = शाखा निर्देश निष्पादित'। दूसरे शब्दों में, 'शाखा दक्षता' विशेष रूप से एक शाखा में शाखा निर्देशों से संबंधित है और उन उदाहरणों की गणना करता है जहां वे अलग हो जाते हैं (कुछ लिया जाता है और कुछ नहीं लिया जाता है)। –

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