2011-09-08 17 views
13

मैं यह पूछ रहा हूं क्योंकि मुझे पता है कि स्रोत फ़ाइलों के बजाय बाइनरी फ़ाइलों का उपयोग करने का कोई तरीका है।क्या सीयूडीए के लिए एक असेंबली भाषा है?

इसके अलावा, मैं अनुमान लगा रहा हूं कि एक असेंबली भाषा के साथ, फ़ंक्शन पॉइंटर्स को अनुकरण करना आसान होगा। जब तक एक जीपीयू पर असेंबली एक सीपीयू पर पूरी तरह से अलग नहीं है।

+0

सीयूडीए के लिए सी के साथ क्या गलत है? http://developer.download.nvidia.com/compute/cuda/2_1/toolkit/docs/NVIDIA_CUDA_Programming_Guide_2.1.pdf –

+4

कुछ हफ्ते पहले उत्तर दिया ["क्या यह सीयूडीए कोड में निर्देश देना संभव है?" ] (http://stackoverflow.com/questions/3677220/is-it-possible-to-put-instructions-into-cuda-code/7072079#7072079)। * नोट: * स्वीकार्य उत्तर नहीं, लेकिन बाद में आया था। – dmckee

+0

@dmckee +1। इसके अलावा, चूंकि CUDA 3.2 (और 2.0-डिवाइस) फ़ंक्शन पॉइंटर्स को पीटीएक्स के साथ दखल देने के बिना समर्थित किया जाता है। और पुराने उपकरणों में डिवाइस-फ़ंक्शन जैसी कोई चीज़ नहीं है - कर्नेल से '__device__' फ़ंक्शंस के सभी कॉल इनलाइन किए गए थे। – aland

उत्तर

29

आप PTX पर एक नज़र डालें करना चाह सकते हैं की एक बोली "की तरह दिखता है" से थोड़ा अधिक है। एनवीआईडीआईए एक प्रदान करता है दस्तावेज़ CUDA 4.0 दस्तावेज़ में इसका वर्णन करता है।

http://developer.nvidia.com/nvidia-gpu-computing-documentation

NVIDIA के रूप में PTX का वर्णन करता है "ता निम्न स्तर के समानांतर धागा निष्पादन आभासी मशीन और अनुदेश सेट वास्तुकला (आईएसए)। PTX एक डेटा-समानांतर कंप्यूटिंग डिवाइस के रूप में GPU उजागर करता है।" बिल्कुल x86 असेंबली की तरह नहीं है, लेकिन आपको यह दिलचस्प पठन मिल सकता है।

+10

यह इंगित करने लायक है कि पीटीएक्स एक आभासी निर्देश सेट है। प्रत्येक विशिष्ट एनवीआईडीआईए आर्किटेक्चर का अपना भौतिक आईएसए है जो पीटीएक्स लक्ष्य करता है।कोई भी इनलाइन x86 एएसएम के समान सीयूडीए कोड में पीटीएक्स निर्देशों को रेखांकित कर सकता है। –

12

हां, एक जीपीयू पर असेंबली एक सीपीयू से बिल्कुल अलग है। अंतरों में से एक यह है कि एक GPU के लिए निर्देश सेट मानकीकृत नहीं है। एनवीडिया (और एएमडी और अन्य जीपीयू विक्रेता) एक जीपीयू मॉडल से अगले में अपने निर्देश सेट को बदल सकते हैं और कर सकते हैं।

तो सीयूडीए एक असेंबली भाषा का पर्दाफाश नहीं करता है। कोई बात नहीं होगी। (और सीयूडीए की सी बोली में सीमाएं, और जो भी अन्य भाषाएं वे समर्थन करते हैं, जीपीयू हार्डवेयर में सीमाओं के कारण हैं, न सिर्फ इसलिए कि एनवीडिया आपको नफरत करता है और आपको परेशान करना चाहता है। इसलिए यदि आपके पास अंतर्निहित निर्देश सेट तक सीधे पहुंच है और असेंबली भाषा, आप उन चीज़ों को जादुई रूप से करने में सक्षम नहीं होंगे जो आप अब नहीं कर सकते हैं।

(ध्यान दें कि एनवीडिया एक "वर्चुअल" निर्देश सेट को परिभाषित करता है जिसे आप अपने कोड में उपयोग और एम्बेड कर सकते हैं। लेकिन यह है नहीं अनुदेश सेट, और यह हार्डवेयर निर्देश के लिए सीधे नक्शा नहीं है। यह एक सरल प्रोग्रामिंग भाषा जो विधानसभा

+1

ओह! जानना अच्छा है ... अगर मैं अलग-अलग जीपीयू पर काम करने की उम्मीद भी नहीं कर सकता ... यह निश्चित रूप से गलत दृष्टिकोण है! धन्यवाद – widgg

+0

आपका सीयूडीए कोड विभिन्न जीपीयू में ठीक काम करेगा। CUDA बस प्रत्येक GPU के लिए एक उपयुक्त लक्ष्य के लिए संकलित करता है। – jalf

15

वास्तव में दो अलग-अलग CUDA असेंबली भाषाएं हैं।

पीटीएक्स एक मशीन-स्वतंत्र असेंबली भाषा है जिसे एसएएसएस को संकलित किया गया है, जो एक विशेष जीपीयू परिवार पर निष्पादित वास्तविक ऑपकोड है। यदि आप .cubins बनाते हैं, तो आप SASS से निपट रहे हैं। अधिकांश सीयूडीए रनटाइम एप्लिकेशन पीटीएक्स का उपयोग करते हैं, क्योंकि इससे उन्हें मूल एप्लिकेशन के बाद जारी किए गए जीपीयू पर चलने में मदद मिलती है।

इसके अलावा, फ़ंक्शन पॉइंटर्स थोड़ी देर के लिए CUDA में रहे हैं यदि आप sm_20 (Fermi/GTX 400 श्रृंखला) को लक्षित कर रहे हैं।

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