2013-01-22 34 views
8

मैं डिवाइस पॉइंटर्स और cudaArray संरचनाओं के इच्छित उपयोग के बीच अंतर के बारे में उलझन में हूं। क्या कोई कृपया बता सकता है कि मैं एक बनाम दूसरे का उपयोग क्यों करूंगा? मेरी मूल समस्या यह है कि दस्तावेज़ के माध्यम से देखने और पुस्तक "उदाहरण द्वारा CUDA" पढ़ने के बाद, मैं एपीआई डिजाइनरों के इरादे को समझ नहीं पा रहा हूं।cudaArray बनाम डिवाइस सूचक

जो मैंने देखा है, ऐसा लगता है कि cudaArray का उपयोग बनावट के लिए किया जाना चाहिए और पॉइंटर्स का उपयोग सीधे स्मृति तक पहुंचने के लिए किया जाना चाहिए। ऐसा लगता है कि 3 डी बनावट केवल cudaArray का उपयोग करके बनाई जा सकती है। क्या सभी बनावट cudaArray का उपयोग करके आवंटित की जानी चाहिए? ऐसा लगता है कि कई उदाहरण नहीं हैं। साथ ही, cudaMallocArray और cudaMallocArray3D पर कोई फ़ंक्शन क्यों है, लेकिन cudaMallocArray2D के बराबर नहीं है? इसके विपरीत, cudaBindTexture और cudaBindTexture2D है, लेकिन cudaBindTexture3D नहीं है?

उत्तर

16

cudaArray मेमोरी का एक अपारदर्शी ब्लॉक है जो बनावट के लिए बाध्यकारी के लिए अनुकूलित है। बनावट space filling curve में संग्रहीत स्मृति का उपयोग कर सकती है, जो बेहतर 2 डी स्थानिक इलाके के कारण बेहतर बनावट कैश हिट दर की अनुमति देती है। डेटा को cudaArray पर कॉपी करने से इसे इस तरह के वक्र में स्वरूपित किया जाएगा।

तो, cudaArray में डेटा संग्रहीत करना एक अनुकूलन तकनीक है जो बेहतर बनावट कैश हिट दरों को उत्पन्न कर सकती है। प्रारंभिक सीयूडीए आर्किटेक्चर पर, cudaArray को कर्नेल द्वारा भी एक्सेस नहीं किया जा सकता है। हालांकि, गणना क्षमता के आर्किटेक्चर> = 2.0 सीयूडीए सतहों के माध्यम से सरणी का उपयोग कर सकते हैं।

यह निर्धारित करना कि आपको cudaArray का उपयोग करना चाहिए या वैश्विक मेमोरी में नियमित बफर स्मृति के लिए इच्छित उपयोग और पहुंच पैटर्न पर आता है। यह परियोजना विशिष्ट होगा।

cudaMallocArray() वास्तव में एक 2 डी सरणी आवंटित करता है, इसलिए मुझे लगता है कि यह मुद्दा सिर्फ असंगत नामकरण है। शायद यह cudaMallocArray2D() पर कॉल करने के लिए और अधिक तार्किक होता।

मैंने 3 डी बनावट का उपयोग नहीं किया है। उम्मीद है कि कोई जवाब देगा और हमें बताएगा कि cudaBindTexture3D() की आवश्यकता क्यों नहीं है।

1

आप cudaBindTextureToArray का उपयोग कर सकते हैं, यह 2 डी और 3 डी दोनों के लिए काम करता है।