मैंने हाल ही में अपने सिर को प्राप्त किया है कि कैसे एनवीसीसी विभिन्न गणना आर्किटेक्चर के लिए CUDA डिवाइस कोड को संकलित करता है।एनवीडिया के एनवीसीसी कंपाइलर में एकाधिक "आर्क" झंडे का उपयोग करने का क्या उद्देश्य है?
मेरी समझ से, एनवीसीसी के -gencode विकल्प का उपयोग करते समय, "आर्क" प्रोग्रामर के अनुप्रयोग द्वारा आवश्यक न्यूनतम गणना आर्किटेक्चर है, और न्यूनतम डिवाइस गणना आर्किटेक्चर भी है जो एनवीसीसी का जेआईटी कंपाइलर पीटीएक्स कोड संकलित करेगा।
मैं यह भी समझता है कि -gencode के "कोड" पैरामीटर गणना वास्तुकला जो NVCC पूरी तरह से, के लिए आवेदन संकलित ऐसी है कि कोई JIT संकलन आवश्यक है।
विभिन्न CUDA परियोजना Makefiles के निरीक्षण के बाद, मैंने देखा है निम्नलिखित नियमित रूप से हो:
-gencode arch=compute_20,code=sm_20
-gencode arch=compute_20,code=sm_21
-gencode arch=compute_21,code=sm_21
और कुछ पढ़ने के बाद, मैंने पाया कि कई डिवाइस आर्किटेक्चर एक भी बाइनरी फ़ाइल में के लिए संकलित किया जा सकता है - में इस मामले में sm_20, sm_21।
मेरे प्रश्न हैं क्यों इतने सारे आर्क/कोड जोड़े आवश्यक हैं? क्या ऊपर दिए गए "आर्क" के सभी मान हैं?
कि और के बीच अंतर क्या है कहना:
-arch compute_20
-code sm_20
-code sm_21
स्वचालित रूप से चयनित "कट्टर" क्षेत्र में जल्द से जल्द आभासी वास्तुकला है, या कुछ अन्य अस्पष्ट व्यवहार है?
क्या कोई अन्य संकलन और रनटाइम व्यवहार है जिसके बारे में मुझे अवगत होना चाहिए?
मैं मैनुअल, http://docs.nvidia.com/cuda/cuda-compiler-driver-nvcc/index.html#gpu-compilation पढ़ा है और मैं अभी भी स्पष्ट के बारे में क्या संकलन या क्रम में क्या होता है नहीं कर रहा हूँ।
चीयर्स,
जेम्स। -> PTX -> एस.ए.एस.एस.
आभासी वास्तुकला (जैसे compute_20
, जो कुछ भी -arch compute...
द्वारा निर्दिष्ट किया जाता
CUDA C/C++ डिवाइस कोड स्रोत:
क्षमा याचना, और धन्यवाद। मैं कई वास्तविक आर्किटेक्चर के लिए पीटीएक्स को जेआईटी संकलन के उद्देश्य को समझता हूं, लेकिन क्या ऐसे सभी पुराने पीटीएक्स आर्किटेक्चर, या केवल न्यूनतम विनिर्देश पीटीएक्स को शामिल करना आवश्यक है? उदाहरण के लिए, यदि मैं चाहता हूं कि कोड जितना संभव हो सके उतने GPU पर चलाना चाहें, तो क्या मैं कह सकता हूं, - compute_11, 12 13 ... 30, 35, या बस शामिल करें-compute_11? बेस्ट, जेम्स। –
आप केवल '-arch compute_11' निर्दिष्ट कर सकते हैं और आप सीसी 1.1 पीटीएक्स कोड उत्पन्न करेंगे। अब और भविष्य में सभी जीपीयू पीटीएक्स के इस संस्करण से कुछ उपयोगी मशीन कोड (सीसी 1.0 उपकरणों के अपवाद के साथ) में जेआईटी-संकलन करने में सक्षम होना चाहिए। हालांकि, अतिरिक्त पीटीएक्स संस्करणों को निर्दिष्ट करके, आप "नया" पीटीएक्स जोड़कर, एक नए आर्किटेक्चर का बेहतर लाभ लेने का अवसर प्रदान कर सकते हैं, और इस प्रकार आपका कोड एक सीसी 3.0 डिवाइस कह सकता है, यदि आप 'compute_30' भी निर्दिष्ट किया गया। यह कोड आकार/संकलन समय और सर्वोत्तम perf के बीच एक व्यापार है। आपकी माइलेज भिन्न हो सकती है। –
अब सभी स्पष्ट, महान उत्तरों। आपके समय के लिए धन्यवाद! –