मैं कैसे नियंत्रित करूं कि सीपीयू पर कौन सी गणनाएं की जाती हैं और जो जीपीयू पर की जाती हैं?


14

मेरी वर्तमान समझ यह है कि एक shader फ़ाइल में कुछ भी GPU पर किया जाता है, और कुछ भी मेरे (Java, मेरे मामले में) कोड CPU पर किया जाता है।

क्या यह सटीक विवरण है?


2
इसके अलावा आप OpenCL जैसी किसी चीज़ का उपयोग करके GPU पर कंप्यूटिंग कर सकते हैं जो अनिवार्य रूप से आपको GPU पर कोड चलाने की अनुमति देता है।
साबुन

जवाबों:


20

यही इसका सार है।

सिद्धांत रूप में, प्लेटफॉर्म, जो भी चाहे, कर सकता है। एक उन्नत ऑपरेटिंग सिस्टम की कल्पना कर सकते हैं, संकलित कोड का सिर्फ-इन-टाइम अनुवाद, से, x86 से GPU कोड। इसी तरह, OpenGL ड्राइवर होस्ट CPU पर जो कुछ भी चाहते हैं उसे चला सकते हैं।

लेकिन वास्तव में, आपने जो वर्णन किया है, वही होता है।


5
IIRC, GPU को भेजे जाने से पहले सीपीयू पर शेड्स संकलित किए जाते हैं । और यह OS के बिना GPU ड्राइवर द्वारा किया जाता है।
मैटलर्स

सच। मैंने शेड्स में प्रोग्राम चलाने के दौरान कई कंपाइल एरर से निपटा है, तब भी जब जावा कोड पहले ही संकलित हो चुका है।
बैसेंटर

1
सैद्धांतिक: मान लीजिए कि मेरे पास एक प्रोग्राम था जो बहुत सीपीयू गहन है लेकिन सिर्फ एक कमांड लाइन इंटरफ़ेस (कोई ग्राफिकल काम नहीं) था। क्या मैं कुछ काम को GPU पर उतार सकता हूं? मैं वास्तव में ऐसा करने की योजना नहीं बना रहा हूं, यह सिर्फ एक वैचारिक बात है जो मुझे रुचती है।
बस्सिन्टर

2
हाँ! जो लिंक @return सच पोस्ट किया गया है वह एक जावा लाइब्रेरी के लिए है जो ऐसा करता है। आम तौर पर, आप ओपनजीएल में एक "गणना shader" लिख सकते हैं, या OpenCL का उपयोग कर सकते हैं। सभी मामलों में, आपको अपने कोड के एक हिस्से को अलग करने की आवश्यकता है जो कि समानांतर है, और उसमें और बाहर की जानकारी पास करें। (जीपीयू ज्यादातर "शर्मनाक समानांतर" कार्यों के लिए महान हैं।)
डेविड वैन कगार

1
इस उत्तर में जोड़ने के लिए एक तारांकन यह है कि कुछ कार्यान्वयन "प्रीडर" के विचार का समर्थन करते हैं - अर्थात, कोड जो कि shader का हिस्सा है, लेकिन जिसका परिणाम किसी दिए गए ड्रॉ कॉल में सभी चालानों में स्थिर रहेगा (जैसे एक समान दृश्य देखें) और प्रोजेक्शन मेट्रिसेस)। एक शॉल्डर कंपाइलर, इस तरह के कोड के बिट्स की पहचान कर सकता है और सीपीयू-साइड को एक बार निष्पादित करने के लिए उन्हें बाहर निकाल सकता है, जिसमें GPU में सबमिट किए गए कार्य में निरंतर आउटपुट भी शामिल है। यह एक सामान्य मामला है जहां "shader = GPU" की धारणा को मोड़ दिया जा सकता है, हालांकि केवल विस्तार में।
DMGregory

7

आम तौर पर, हाँ। जावा का उपयोग सीपीयू पर चलने वाले प्रोग्राम लिखने के लिए किया जाता है। शेडर भाषाओं (cg, hlsl, et al) का उपयोग उन कार्यक्रमों को लिखने के लिए किया जाता है जो gpu पर चलते हैं।

नियम का एक अपवाद तीसरे पक्ष के एप का उपयोग करेगा जो अंतर को पाट सकता है।


1
बहुत दिलचस्प टिप, "अपरपी" का आपका लिंक। GPU पर कुछ JVM कोड चलाएं ... पेचीदा!
david van brink

3

david van brink ने आपके प्रश्न का सामान्य रूप से उत्तर दिया।

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

इसके विपरीत, कोड जो वैक्सक्लक या बूस्ट कंप्यूटिंग, या माइक्रोसॉफ्ट के एएमपी या एनवीडिया थ्रस्ट जैसे कंप्यूटिंग पुस्तकालयों के माध्यम से निष्पादित किया जाता है, एपीआई सेटअप झंडे के आधार पर GPU या CPU पर निष्पादित किया जा सकता है।

और फिनिश टच के लिए, सीपीयू के अंदर आपके पास एक डीएसपी आर्किटेक्चर भी होता है, जिसके एक हिस्से में हम सिमडी कहते हैं। इंटेल का ispc कंपाइलर कोड जनरेट करने में मदद करता है जो कि "डीम्ड" है जो कि सिंपल टाइम पर ढेर सारे परफॉरमेंस डायग्नॉस्टिक्स के साथ सिमड लेन पर चलने में मदद करता है। OpenMP को इसमें जोड़ें और आप मल्टीथ्रेडेड SIMD प्राप्त कर सकते हैं, जो GPU की अवधारणाओं से संपर्क करता है। यदि आपके पास एक उच्च अंत सीपीयू और कम अंत जीपीयू है, तो यह वास्तव में अधिक प्रदर्शनकारी हो सकता है।
http://ispc.github.io/

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.