क्या GPU संदर्भ के बारे में चिंता करने लायक है?


9

क्या सीपीयू के प्रदर्शन में संदर्भ का स्थान उतना ही अधिक होता है जितना कि सीपीयू का प्रदर्शन?

उदाहरण के लिए, यदि मैं GPU के लिए 200 ड्रॉ कमांड भेजता हूं, तो क्या मुझे बफ़र्स / टेक्सचर मैप्स के चारों ओर कूदने के बजाय प्रत्येक कमांड का डेटा मेमोरी में सन्निहित है, तो (संभावित) ध्यान देने योग्य अंतर दिखाई देगा?

साइड सवाल: मैं मान रहा हूं कि अधिकांश संसाधनों को अपरिवर्तनीय होने से जीपीयू झूठे साझा मुद्दों के खिलाफ सुनिश्चित करता है। लेकिन जिस मामले में वे नहीं हैं, वह यह है कि धागे हमेशा चार टुकड़ों के काम के लायक क्यों होते हैं?

जवाबों:


10

संदर्भ की स्थानीयता मायने रखती है, लेकिन आपको इतना परेशान होने की जरूरत नहीं है ... क्योंकि आपके पास पूर्ण नियंत्रण नहीं है।

OpenGL / DirectX का उपयोग करते समय आपके पास आमतौर पर मेमोरी लेआउट पर सीमित नियंत्रण होता है, ड्राइवर बाकी काम करेगा। उदाहरण के लिए आप कई वर्टेक्स बफ़र लेआउट की कोशिश कर सकते हैं, जैसे कि इंटरलेव्ड या नॉन-इंटरलेव्ड वर्टेक्स डेटा का उपयोग करना और आपके डेटा / ड्राइवर / जीपीयू के प्रदर्शन के आधार पर अलग-अलग होंगे। प्रोफ़ाइल और चुनें कि आपके आवेदन में सबसे अच्छा क्या फिट बैठता है।

उदाहरण के लिए, GPU रत्न पाइपलाइन अनुकूलन में, संदर्भ का स्थानीयता दो बार उल्लिखित है , पहला:

अपेक्षाकृत अनुक्रमिक तरीके से वर्टेक्स डेटा तक पहुंचें। आधुनिक जीपीयू कैश मेमोरी पहुंचता है जब वर्टीकल लाते हैं। किसी भी स्मृति पदानुक्रम में, संदर्भ का स्थानिक स्थान कैश में हिट को अधिकतम करने में मदद करता है, इस प्रकार बैंडविड्थ आवश्यकताओं को कम करता है।

और दूसरा

टी एंड एल वर्टेक्स कैश के लिए ऑप्टिमाइज़ करें। आधुनिक जीपीयू में एक छोटा फर्स्ट-इन, फर्स्ट-आउट (एफआईएफओ) कैश होता है जो हाल ही में परिवर्तित वर्जन के परिणाम को स्टोर करता है; इस कैश में एक हिट सभी परिवर्तन और प्रकाश व्यवस्था के काम को बचाता है, साथ ही पाइप लाइन में पहले किए गए सभी कार्यों के साथ। इस कैश का लाभ उठाने के लिए, आपको अनुक्रमित प्राइमेटिव का उपयोग करना चाहिए, और आपको अपने वर्टीकल को मेष पर संदर्भ के स्थानीयता को अधिकतम करने के लिए आदेश देना होगा। ऐसे उपकरण उपलब्ध हैं-जिनमें डी 3 डीएक्स और एनवीट्रीस्ट्रिप (एनवीआईडीआईए 2003) शामिल हैं- इस कार्य में आपकी मदद कर सकते हैं।

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

यदि आपके एप्लिकेशन में कोई परफ़ॉर्मेंस हिट हो रहा है, तो आपको पहले टोंटी का पता लगाना चाहिए, हो सकता है कि यह रेफ़रेंस का एक स्थानीय डेटा समस्या न हो, लेकिन ऐसा इसलिए हो सकता है क्योंकि बिना किसी कॉलिंग के बड़ी मात्रा में डेटा है, उदाहरण के लिए आप फ्रिज़ी क्यूलर नहीं कर रहे हैं .. आदि आप इस विषय पर मेरे जवाब की जाँच कर सकते हैं।

मुझे लगता है कि OpenCL / CUDA का उपयोग करते समय आपको संदर्भ के स्थानीयता के बारे में अधिक चिंता करनी चाहिए, क्या आप अक्सर मेमोरी लेआउट पर पूर्ण नियंत्रण रखते हैं।


3

मूल रूप से, GPU का उपयोग केवल मल्टीमीडिया अनुप्रयोगों के लिए किया जाता था जो कि बहुत कम डेटा का उपयोग करते हैं। चूंकि सामान्य प्रयोजन के अनुप्रयोगों के लिए जीपीयू का तेजी से उपयोग किया जाता है (इसलिए, GPGPU शब्द), वे अब बड़े आकार के हार्डवेयर-प्रबंधित कैश की विशेषता रखते हैं, उदाहरण के लिए, फ़र्मि जीपीयू में 768-KB अंतिम-स्तर कैश है, केपलर GPU 1536 KB है अंतिम-स्तर कैश और मैक्सवेल GPU में 2048 KB अंतिम-स्तर कैश है। यह, GPU कैश पर अनुसंधान के एक बड़े निकाय के साथ-साथ दिखाता है कि GPU के लिए डेटा स्थानीयता निश्चित रूप से महत्वपूर्ण है। उपरोक्त विवरण और संदर्भ के लिए मेरा सर्वेक्षण पत्र देखें ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.