2012-01-07 11 views
16

प्रदर्शित करने के लिए संकल्पना और सरल उदाहरण मैं साइमन ग्रीन द्वारा Particle Simulation with CUDA शीर्षक वाले एनवीआईडीआईए सफेद पेपर को पढ़ रहा हूं।क्यूडीए में बनावट मेमोरी: प्रदर्शन

यह एसडीके कण उदाहरण और उपयोग किए गए एल्गोरिदम का वर्णन करता है।

कोड के प्रदर्शन पर चर्चा करते समय लेखक कहते हैं कि कणों की स्थिति और वेग की वैश्विक स्मृति सरणी बनावट के लिए "बाध्य" हैं।

अब मैं बनावट स्मृति की अवधारणा से बहुत उलझन में हूं। NVIDIA CUDA प्रोग्रामिंग गाइड किसी भी उदाहरण के बिना कुछ वास्तव में गोर और मुश्किल स्पष्टीकरण के माध्यम से चला जाता है।

  1. कोई/दे सकते हैं (नौसिखियों के लिए बनावट स्मृति) एक बहुत आसान करने के लिए मुझे उल्लेख कैसे बनावट प्रयोग किया जाता है और प्रदर्शन में सुधार के उदाहरण:

    इसलिए मैं 2 प्रश्न हैं।

  2. पृष्ठ पर पृष्ठ 40 पर CUDA प्रोग्रामिंग मार्गदर्शिका 4.0 कहता है "एक बनावट रैखिक स्मृति या CUDA सरणी का कोई क्षेत्र हो सकता है"। अब अगर, (जैसा कि कहा गया है), बनावट मेमोरी ग्लोबल मेमोरी की तुलना में बेहतर प्रदर्शन देती है क्यों नहीं, पूरी वैश्विक मेमोरी को स्मृति बनाने के लिए "बाध्य" क्यों नहीं करती?

उत्तर

22
  1. CUDA एसडीके एक सीधा उदाहरण simpleTexture जो एक छोटी सी 2 डी एक बनावट का उपयोग कर परिवर्तन समन्वय प्रदर्शन को दर्शाता है शामिल हैं।
  2. ध्यान रखने योग्य पहली बात यह है कि बनावट स्मृति वैश्विक स्मृति है। केवल अंतर यह है कि बनावट को केवल समर्पित पढ़ने-योग्य कैश के माध्यम से एक्सेस किया जाता है, और कैश में हार्डवेयर फ़िल्टरिंग शामिल होती है जो पढ़ने की प्रक्रिया के हिस्से के रूप में रैखिक फ़्लोटिंग पॉइंट इंटरपोलेशन कर सकती है। हालांकि, कैश एक पारंपरिक कैश से अलग है, जिसमें यह स्थानिक इलाके (बनावट की समन्वय प्रणाली में) के लिए अनुकूल है और स्मृति में इलाके में नहीं है। कुछ अनुप्रयोगों के लिए, यह आदर्श है और फ़िल्टरिंग हार्डवेयर से कैश और मुफ्त एफएलओपी के कारण प्रदर्शन लाभ प्रदान करेगा, लेकिन दूसरों के लिए, यह नहीं होगा और बनावट धीमी हो सकती है क्योंकि एक्सेस में कैश होता है वैश्विक स्मृति पढ़ने के अलावा मिस पेनल्टी, और इंटरपोलेशन की आवश्यकता नहीं है।

तो कण सिमुलेशन की तरह कुछ बनावट से फायदा हो सकता है क्योंकि आम तौर पर गणना कोशिकाओं या नियंत्रण की मात्रा जहां स्थानीय बातचीत में माना जाता है में प्रदर्शन कर रहे हैं, और पड़ोसी कणों एक दूसरे के वेग और त्वरण का उपयोग करने की जरूरत है। एक स्थानिक रैखिक स्मृति कैश की तुलना में एक स्थानिक स्थानीय कैश बेहतर काम करता है। लेकिन अन्य अनुप्रयोगों के लिए, मेमोरी एक्सेस पैटर्न में आंतरिक स्थानिक इलाका नहीं है, और बनावट परंपरागत कैश मेमोरी पर बहुत कम या कोई लाभ नहीं देती है।

+0

तो क्या आप कह रहे हैं कि बनावट मेमोरी वैश्विक स्मृति तक पहुंचने का एक अलग तरीका है? मेरे काम के संदर्भ में, मुझे प्रत्येक कण के लिए तेजी से पड़ोसी खोज करने के लिए जीपीयू पर ऑक्टेट बनाने में दिलचस्पी है। मान लें कि प्रत्येक थ्रेड सिमुलेशन में एक कण के लिए गणना करेगा। ऑक्टेट डेटा संरचना एक वेक्टर है। पेड़ के पारदर्शी के दौरान, सभी धागे अपने व्यक्तिगत पड़ोसियों को खोजने के लिए पेड़ के बड़े पैमाने पर "नीचे चलते हैं"। तो अगर ऑक्टेट वेक्टर बनावट मेमोरी के लिए बाध्य है तो मेरे पेड़ के ट्रैवर्स तेजी से होंगे? – smilingbuddha

+0

एनवीआईडीआईए जीपीयू पर बनावट हार्डवेयर केवल अभिन्न प्रकार के साथ काम करता है। एक ठेठ ऑक्टेट संरचना एक बनावट के लिए बाध्य नहीं हो सका। – talonmies

+2

एकल परिशुद्धता फ्लोटिंग पॉइंट मान भी शामिल नहीं हैं? CUDA 4 के पृष्ठ 40 पर।0 प्रोग्रामिंग गाइड यह कहता है "फ़ाइल बनावट पर एक बनावट संदर्भ घोषित किया गया है * प्रकार * बनावट <डेटाटाइप, टाइप, रीडमोड> texref * के एक चर के रूप में * जहां डेटाटाइप * बनावट लाने के दौरान डेटा के प्रकार को परिभाषित करता है और * टाइप * है मूल पूर्णांक और एकल परिशुद्धता फ़्लोटिंग पॉइंट प्रकारों तक सीमित ... " – smilingbuddha

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