2012-11-09 31 views
5

की तुलना में स्थान पर दो बार स्थान पर कब्जा कर लिया गया है, मैंने अभी देखा है कि मेरा CUDA कर्नेल 'सिद्धांत' द्वारा गणना की गई जगह से बिल्कुल दोगुनी जगह का उपयोग करता है। जैसेCUDA साझा स्मृति

__global__ void foo() 
{ 
    __shared__ double t; 
    t = 1; 
} 

PTX जानकारी दिखाता है:
ptxas जानकारी: _Z3foov के लिए समारोह गुण, 0 बाइट्स फ्रेम, 0 बाइट्स फैल स्टोर, 0 बाइट्स फैल भार ढेर
ptxas जानकारी: 4 रजिस्टर, 16 बाइट्स smem, 32 बाइट्स प्रयुक्त

__global__ void foo() 
{ 
    __shared__ int t[1024]; 
    t[0] = 1; 
} 
: cmem [0]

लेकिन एक डबल के आकार केवल 8.

अधिक उदाहरण है

ptxas जानकारी: प्रयुक्त 3 रजिस्ट्रार, 8192 बाइट्स स्मेम, 32 बाइट्स सेमीम [0]

क्या कोई समझा सकता है क्यों?

+1

@ Fr34K: संकलन और असेंबलर द्वारा बनाए गए * स्थिर असाइनमेंट * के आकार के साथ समय सेटिंग को कैसे चलाया जा सकता है? – talonmies

+0

और स्पष्टीकरण की आवश्यकता है। आपने कितने ब्लॉक शुरू किए हैं ?? – Fr34K

+0

@talonmies: स्पष्टीकरण के लिए धन्यवाद। मैं उस बिंदु से चूक गया। :) – Fr34K

उत्तर

1

लगता है कि समस्या वर्तमान CUDA संकलक में चला गया है।

__shared__ int a[1024]; 

कमांड के साथ संकलित 'NVCC -m64 -Xptxas -v -ccbin /opt/gcc-4.6.3/bin/g++-4.6.3 shmem.cu' देता है

ptxas info : Used 1 registers, 4112 bytes smem, 4 bytes cmem[1] 

रहे हैं इस मामले में कुछ साझा स्मृति ओवरहेड, लेकिन उपयोग दोगुनी नहीं है।

+1

प्रश्न में संकलक टी को हटा रहा है क्योंकि चर का कोई दुष्प्रभाव नहीं है। 16 बाइट्स की संभावना है क्योंकि आप compute_1x आर्किटेक्चर के लिए संकलित कर रहे हैं। उपरोक्त उत्तर compute_10 के लिए संकलित भी है। यदि आप SASS को संकलित करते हैं तो आप निर्धारित करने के लिए प्रत्येक साझा स्मृति आवंटन का निरीक्षण करने के लिए cuobjdump का उपयोग कर सकते हैं कि आकार की गणना कैसे की जाती है। –

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