मैं कंप्यूट_Capability 2.0 डिवाइस (GTX460) के साथ CUDA 4.0 आर्क का उपयोग करता हूं। 'क्यूबिन' और 'पीटीएक्स' फ़ाइल के बीच क्या अंतर है? मुझे लगता है कि क्यूबिन जीपीयू के लिए मूल कोड है इसलिए यह आर्क है। विशिष्ट, और पीटीएक्स एक मध्यवर्ती भाषा है जो जेआईटी संकलन के माध्यम से फर्मि डिवाइस (जैसे Geforce GTX 460) पर चलती है। जब मैं एक सीयू स्रोत संकलित करता हूं, तो मैं पीटीएक्स या क्यूबिन लक्ष्य के बीच चयन कर सकता हूं। अगर मुझे क्यूबिन फ़ाइल चाहिए, तो मैं "code = sm_20" चुनता हूं। लेकिन अगर मैं एक पीटीएक्स फ़ाइल चाहता हूं तो मैं "code = compute_20" का उपयोग करता हूं। क्या यह सही है?एनवीआईडीआईए एनवीसीसी और सीयूडीए: क्यूबिन बनाम पीटीएक्स
उत्तर
आप जो उपकरणों को लक्षित करना (-code
) को नियंत्रित करने के विकल्पों के साथ एक संकलन चरण (-ptx
और -cubin
) का चयन करने के लिए विकल्पों को मिला है, तो आप प्रलेखन फिर से मिलना चाहिए।
एनवीसीसी एनवीआईडीआईए कंपाइलर ड्राइवर है। -ptx
और -cubin
विकल्पों का उपयोग संकलन के विशिष्ट चरणों का चयन करने के लिए किया जाता है, डिफ़ॉल्ट रूप से, बिना किसी चरण-विशिष्ट विकल्पों के एनवीसीसी इनपुट से निष्पादन योग्य उत्पादन करने का प्रयास करेगा। ज्यादातर लोग -c
विकल्प का उपयोग एनवीसीसी को ऑब्जेक्ट फ़ाइल बनाने के लिए करते हैं, जिसे बाद में डिफ़ॉल्ट प्लेटफ़ॉर्म लिंकर द्वारा निष्पादन योग्य में जोड़ा जाएगा, -ptx
और -cubin
विकल्प केवल ड्राइवर उपयोगी हैं यदि आप ड्राइवर API का उपयोग कर रहे हैं। इंटरमीडिएट चरणों के बारे में अधिक जानकारी के लिए, CUDA Toolkit इंस्टॉल करते समय स्थापित एनवीसीसी मैन्युअल देखें।
-ptx
से उत्पादन एक सादे-पाठ PTX फ़ाइल है। पीटीएक्स एनवीआईडीआईए जीपीयू के लिए एक इंटरमीडिएट असेंबली भाषा है जिसे अभी तक पूरी तरह से अनुकूलित नहीं किया गया है और बाद में डिवाइस-विशिष्ट कोड में इकट्ठा किया जाएगा (विभिन्न उपकरणों के उदाहरण के लिए अलग-अलग रजिस्टर गिनती हैं, इसलिए पूरी तरह से पीटीएक्स को अनुकूलित करना गलत होगा)।-cubin
से आउटपुट एक वसा बाइनरी है जिसमें एक या अधिक डिवाइस-विशिष्ट बाइनरी छवियों के साथ-साथ (वैकल्पिक रूप से) PTX हो सकती है।
-code
तर्क आप का उल्लेख पूरी तरह से एक अलग उद्देश्य है। मैं आपको एनवीसीसी दस्तावेज को देखने के लिए प्रोत्साहित करता हूं जिसमें कई उदाहरण हैं, सामान्य रूप से मैं -gencode
विकल्प का उपयोग करने की सलाह दूंगा क्योंकि यह अधिक नियंत्रण की अनुमति देता है और आपको एक बाइनरी में कई डिवाइसों को लक्षित करने की अनुमति देता है।
-gencode arch=compute_xx,code=\'compute_xx,sm_yy,sm_zz\'
कारणों गणना क्षमता xx के साथ सभी उपकरणों (किarch=
सा) को लक्षित करने और अंतिम वसा बाइनरी में sm_yy और sm_zz के लिए PTX (code=compute_xx
) के साथ ही उपकरण विशिष्ट बाइनरी एम्बेड करने के लिए NVCC: एक त्वरित उदाहरण के रूप में ।
'.cubin' एक CUDA बाइनरी है, '.ptx' CUDA असेंबलर स्रोत (टेक्स्ट) है जो' ptxas' assembler को पास हो जाता है –