caching - सीयूडीए के GPU में टीएलबी मिस(और उच्च ग्लोबल मेमोरी रिपले ओवरहेड) से कैसे बचें?



cuda hpc (1)

यह शीर्षक मेरी वास्तविक समस्या से अधिक विशिष्ट हो सकता है, हालांकि मेरा मानना ​​है कि इस प्रश्न का उत्तर देने से अधिक सामान्य समस्या का समाधान होगा, जो है: उच्च विलंबता (~ 700 चक्र) के प्रभाव को कम करने के लिए जो यादृच्छिक (लेकिन सहसंयोजित) वैश्विक से आता है GPU में स्मृति पहुंच

सामान्य तौर पर यदि कोई वैश्विक स्मृति को कोलेस्ड लोड के साथ एक्सेस करता है (जैसे मैं 128 बाइट्स पढ़ता हूं), लेकिन बहुत अधिक दूरी (256 केबी -64 एमबी) के साथ कोलेस्ड एक्सेस्स के साथ, एक उच्च टीएलबी (अनुवाद लुकसाइड बफ़र) मिस् दर को मिलता है यह उच्च टीएलबी मिस दर सीमित संख्या (~ 512) और TLB लुकअप तालिका में प्रयुक्त मेमोरी पेजों के आकार (~ 4 केबी) के कारण है।

मुझे लगता है कि वर्चुअल मेमोरी NVIDIA द्वारा प्रयोग किया जाता है, इस तथ्य के कारण उच्च टीएलबी की मिस रेट लगता है कि मैं उच्च (98%) ग्लोबल मेमोरी रीप्ले ओव्हरहेड और कम थ्रुपुट (45 जीबी / एस, केबीसी के साथ) और प्रोफाइलर में तथ्य यह है कि विभाजन शिविर फर्मी के बाद से कोई समस्या नहीं है

क्या किसी तरह से उच्च टीएलबी की मिस दर से बचने के लिए संभव है? यदि मैं एक्स (X x Y x Z) क्यूब को एक्स आयाम से और एक्स * वाई "स्ट्राइड" के साथ जेड आयाम के साथ जोड़ता हूं, तो क्या 3 डी टेक्सचर कैश सहायता की ज़रूरत है?

इस विषय पर कोई टिप्पणी की सराहना की है।

बाधाएं: 1) वैश्विक डेटा को पुनर्व्यवस्थित / ट्रांस्फ़्ड नहीं किया जा सकता है; 2) कर्नेल संचार बाध्य है।


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

आप क्या कर सकते हैं, लेकिन थ्रूपुट पर परिणामी विलंबता के प्रभाव को कम करना है। बी = 250 जीबी / एस की वैश्विक स्मृति बैंडविड्थ पर टी = 700 चक्रों को छुपाने के लिए, आपको किसी भी समय उड़ान में डेटा के बी / टी = 175 केबी के लिए मेमोरी लेनदेन की आवश्यकता है (या प्रत्येक के लिए 12.5 केबी 14 एसएमएक्स) पूरी तरह भरी हुई मेमोरी इंटरफेस और टीएलबी के एक उच्च अनुपात के कारण, आपको पता चल जाएगा कि विलंबता 2000 चक्रों के करीब आती है, जिसके लिए उड़ान भरने में लगभग 32 KB लेनदेन की आवश्यकता होती है।

चूंकि फ्लाइट में मेमोरी रीड ट्रांजैक्शन के प्रत्येक शब्द के लिए एक रजिस्टर की आवश्यकता होती है, जहां एक बार आने के बाद मूल्य संग्रहीत किया जाता है, इसलिए मैमोरी विलंबता छिपने के लिए रजिस्टर दबाव के खिलाफ शेष होना चाहिए। उड़ान में 32 केबी डेटा रखने के लिए 8192 रजिस्टरों की आवश्यकता होती है, या एसएमएक्स पर उपलब्ध कुल रजिस्टरों का 12.5%।

(ध्यान दें कि ऊपर के अनुमान के लिए मैंने KiB और KB के बीच अंतर को अनदेखा किया है)।