के लिए रजिस्टर का उपयोग करने के लिए सीयूडीए को मजबूर करना मेरे पास मेरे कर्नेल में कई अप्रयुक्त रजिस्टर्स हैं। मैं क्यूडीए को कुछ डेटा रखने के लिए कुछ रजिस्टरों का उपयोग करने के लिए बताना चाहता हूं, हर बार जब मुझे इसकी आवश्यकता होती है तो वैश्विक डेटा पढ़ने के बजाए। (मैं साझा मेम उपयोग करने में सक्षम नहीं हूँ।)एक यूआरएल
__global__ void simple(float *gData) {
float rData[1024];
for(int i=0; i<1024; i++) {
rData[i]=gData[i];
}
// work on the data here
}
संकलन w /: NVCC -arch sm_20 --ptxas-विकल्प = -v simple.cu, और मैं
0 बाइट्स फ्रेम ढेर मिलता है, 0 बाइट्स फैल स्टोर, 0 बाइट्स फैल भार
प्रयुक्त 2 रजिस्टर, 40 बाइट्स cmem [0]
__global__ void simple(float *gData) {
register float rData[1024];
for(int i=0; i<1024; i++) {
rData[i]=gData[i];
}
// work on the data here
}
रजिस्टर घोषणा कुछ नहीं करता है।
0 बाइट्स ढेर फ्रेम, 0 बाइट्स फैल स्टोर, 0 बाइट्स फैल भार
प्रयुक्त 2 रजिस्टर, 40 बाइट्स cmem [0]
__global__ void simple(float *gData) {
volatile float rData[1024];
for(int i=0; i<1024; i++) {
rData[i]=gData[i];
}
// work on the data here
}
अस्थिर घोषणा ढेर भंडारण बनाता है:
4096 बाइट्स फ्रेम ढेर, 0 बाइट्स फैल स्टोर, 0 बाइट्स फैल भार
प्रयुक्त 21 प्रतिरोधकारियों, 40 बाइट्स cmem [0]
1) एक आसान तरीका एक चर के लिए रजिस्टर अंतरिक्ष उपयोग करने के लिए संकलक बताने के लिए है?
2) 'स्टैक फ्रेम' कहां है: रजिस्टर, ग्लोबल मेम, स्थानीय मेम, ...? एक ढेर फ्रेम क्या है? (जब GPU एक ढेर एक आभासी ढेर है के बाद से?)
3) simple.ptx फ़ाइल मूल रूप से रिक्त है: (NVCC -arch sm_20 -ptx simple.cu)
.loc 2 14 2
ret;
किसी भी विचार है जहाँ मैं असली मशीन/संकलित कोड पा सकते हैं?
कंपाइलर ने पूरे कोड को अनुकूलित किया, क्योंकि यह किसी भी गैर-क्षणिक स्थिति को संशोधित नहीं करता है। – njuffa
प्रति थ्रेड 1024 रजिस्टरों के लिए पूछना एक बहुत लंबा आदेश है। अधिकांश कर्नेल के लिए प्रति थ्रेड के दर्जनों रजिस्ट्रार की आवश्यकता होती है। यदि आप पूरी तरह से सुनिश्चित करना चाहते हैं कि संकलक एक चर के लिए एक रजिस्टर का उपयोग कर सकता है, तो इसे स्केलर होना चाहिए (यानी, एक सरणी जिसे आप 'लूप' के लिए इंडेक्स नहीं करते हैं)। –
कहां/किस स्टैक फ्रेम का जवाब यहां पाया जा सकता है: http://stackoverflow.com/questions/7810740/where-does-cuda-allocate-the-stack-frame-for-kernels – Doug