2010-10-14 21 views
11

प्रोग्रामिंग मार्गदर्शिका में इस सरल प्रश्न का उत्तर नहीं मिल रहा है: एनवीसीसी के साथ कर्नेल को संकलित करते समय, आकार, पूर्ण, लंबे, और लंबे समय तक किस आकार का पूर्णांक घोषित किया जाता है, लम्बा लम्बा? क्या यह मेरे होस्ट आर्किटेक्चर पर निर्भर करता है, इसलिए मुझे int16_t, int32_t, और int64_t का उपयोग करना चाहिए, या यह हमेशा एक निश्चित आकार है?प्रोग्रामिंग क्यूडा कर्नेल

उत्तर

10

यह होस्ट कंपाइलर पर निर्भर करता है। विशेष रूप से, nvcc उन प्रकार की परिभाषा मेजबान कंपाइलर के प्रतिनिधित्व से सहमत होगी।

अभ्यास में, char, short, और int डेटा प्रकार है कि CUDA समर्थन करता है (8, 16, और 32 बिट क्रमशः) सभी प्लेटफार्मों पर उम्मीद के मुताबिक आकार है। हालांकि long का आकार प्लेटफ़ॉर्म से प्लेटफ़ॉर्म तक भिन्न होता है।

+1

क्या आप वाकई सही हैं? डिवाइस कोड को पीटीएक्स कमांड में परिवर्तित करने की आवश्यकता है। यह अजीब होगा अगर यह प्रक्रिया होस्ट आर्किटेक्चर विशिष्ट थी। मैंने सीयूडीए दस्तावेज़ों में देखा है और कुछ भी नहीं ढूंढ पाया। – nsanders

+2

हां, डिवाइस डेटा प्रकारों को मेजबान प्रकारों से मेल खाना चाहिए, अन्यथा यह अनुमान करना असंभव होगा कि मेजबान को कितना memcpy करना है। – Edric

+0

धन्यवाद। यही वही है जो मुझे चाहिए था। यह समझ में आता है क्योंकि अगर मैं अपने होस्ट कोड और मेरे कर्नेल कोड के बीच के प्रकारों से मेल खाने के लिए ज़िम्मेदार था तो यह एक दुःस्वप्न होगा। –

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