क्या GPU के बजाय CPU का उपयोग करने के लिए कोई लाभ हैं?


63

मैं प्रोसेसर और ग्राफिक्स कार्ड पर शोध कर रहा हूं, और मुझे पता चला कि जीपीयू सीपीयू की तुलना में तेज हैं। मैंने इस एक लेख में पढ़ा , 2-वर्षीय एनवीडिया जीपीयू ने 3.2 गीगाहर्ट्ज़ कोर आई 7 इंटेल प्रोसेसर को कुछ परिस्थितियों में 14 गुना बढ़ा दिया। अगर GPU तेज है, तो डेवलपर्स गेम में हर फ़ंक्शन के लिए उनका उपयोग क्यों नहीं करते हैं? क्या GPU के लिए ग्राफिक्स के अलावा कुछ भी करना संभव है?


17
यदि आप ऐसे गेम में हैं, जहां आप GPU के लिए सब कुछ बंद कर रहे हैं, और आपका CPU शायद ही कुछ कर रहा है, तो आप CPU पर कुछ लोड वापस डालकर एक प्रदर्शन वृद्धि प्राप्त कर सकते हैं।
Tetrad

3
आपका GPU आपके CPU से बेहतर हो सकता है, लेकिन मुझे नहीं लगता कि आपका वीडियो कार्ड आपके मेनबोर्ड से बेहतर है (और मैं OS की तुलना ड्राइवर लोल से नहीं करूंगा)
e-MEE

27
GPU is faster than a CPUएक मिथक है कि बहुत से लोग विश्वास करते हैं कि जीपीयू के लिए विशेष रूप से तैयार की गई समस्याओं के आधार पर बेंचमार्क देखने के बाद (इस वर्ग की समस्याओं को "शर्मनाक समानांतर समस्याएं" कहा जाता है), इस सुपरयूजर प्रश्न पर मेरा जवाब देखें: हम अभी भी क्यों उपयोग कर रहे हैं GPU के बजाय CPU?
रेयान


5
एक लाभ यह है कि हर कंप्यूटर में एक सीपीयू :)
टिम होल्ट

जवाबों:


50

"मैंने पढ़ा है कि एफ 1 कारें उन सड़कों की तुलना में अधिक तेज़ होती हैं जिन्हें हम सड़कों पर चलाते हैं ... लोग एफ 1 कारों का उपयोग क्यों नहीं करते हैं?" खैर ... इस सवाल का जवाब आसान है: एफ 1 कारें जितनी तेजी से टूटती या मुड़ती हैं, उतनी तेजी से कार नहीं चलाती (सबसे धीमी कार उस मामले में एफ 1 को हरा सकती है)। GPUs का मामला बहुत समान है, वे प्रसंस्करण की एक सीधी रेखा का पालन करने में अच्छे हैं, लेकिन जब वे विभिन्न प्रसंस्करण पथों को चुनने की बात करते हैं तो वे इतने अच्छे नहीं होते हैं।

ते GPU में निष्पादित एक कार्यक्रम समझ में आता है जब इसे समानांतर में कई बार निष्पादित किया जाना चाहिए, उदाहरण के लिए जब आपको टेक्सचर ए से सभी पिक्सल को बनावट बी से पिक्सेल के साथ मिश्रण करना होगा और उन्हें सभी को बनावट सी में डाल दिया जाएगा। यह कार्य, जब निष्पादित किया जाता है एक CPU, इस तरह से संसाधित किया जाएगा:

for( int i =0; i< nPixelCount; i++ )
     TexC[i] = TexA[i] + TexB[i];

लेकिन यह धीमा है जब आपको बहुत सारे पिक्सेल की प्रक्रिया करनी होती है, इसलिए ऊपर दिए गए कोड का उपयोग करने के बजाय GPU, यह सिर्फ अगले एक का उपयोग करता है:

     TexC[i] = TexA[i] + TexB[i];

और फिर यह इस प्रोग्राम के साथ सभी कोर को पॉप्युलेट करता है (अनिवार्य रूप से प्रोग्राम को कोर में कॉपी करता है), iप्रत्येक के लिए एक मान निर्दिष्ट करता है । फिर यह वह जगह है जहां यह GPU से जादू आता है और सभी कोर को एक ही समय में प्रोग्राम निष्पादित करते हैं , जिससे रैखिक सीपीयू प्रोग्राम की तुलना में बहुत अधिक संचालन बहुत तेज हो सकता है।

काम करने का यह तरीका ठीक है जब आपको उसी तरह से बहुत सारे छोटे इनपुट्स में प्रोसेस करना पड़ता है, लेकिन वास्तव में तब बुरा होता है जब आपको एक प्रोग्राम बनाना होता है जिसमें सशर्त ब्रांचिंग हो सकती है। तो अब देखते हैं कि कुछ कंडीशन चेक करने पर CPU क्या करता है:

  • 1: पहले तार्किक ऑपरेशन तक कार्यक्रम निष्पादित करें
  • 2: मूल्यांकन करें
  • 3: तुलना के मेमोरी एड्रेस रिजल्ट से जारी रखें (जेएनजेड एसएसएम निर्देश के साथ)

यह सीपीयू के लिए एक इंडेक्स सेट करने के रूप में बहुत तेज़ है, लेकिन GPU के लिए ऐसा करने के लिए, यह बहुत अधिक जटिल है। क्योंकि GPU से बिजली एक ही समय में एक ही निर्देश को निष्पादित करने से आती है (वे SIMD कोर हैं), उन्हें चिप आर्किटेक्चर का लाभ उठाने में सक्षम होने के लिए सिंक्रनाइज़ किया जाना चाहिए। शाखाओं से निपटने के लिए GPU तैयार करने का तात्पर्य कमोबेश:

  • 1: प्रोग्राम का एक संस्करण बनाएं जो केवल शाखा ए का अनुसरण करता है, इस कोड को सभी कोर में पॉप्युलेट करें।
  • 2: पहले तार्किक ऑपरेशन तक कार्यक्रम निष्पादित करें
  • 3: सभी तत्वों का मूल्यांकन करें
  • 4: शाखा ए का पालन करने वाले सभी तत्वों को संसाधित करना जारी रखें, पथ बी को चुनने वाली सभी प्रक्रियाओं को लागू करें (जिसके लिए कोर में कोई भी नहीं है!)। अब वे सभी कोर जिन्होंने पथ बी को चुना है, वे IDLE !! - सबसे खराब स्थिति एक ही कोर निष्पादन और हर दूसरे कोर इंतजार कर रहे हैं।
  • 5: एक बार जब सभी संसाधन समाप्त हो जाते हैं, तो कार्यक्रम के शाखा बी संस्करण को सक्रिय करें (इसे मेमोरी बफ़र्स से कुछ छोटी मेमोरी मेमोरी में कॉपी करके)।
  • 6: निष्पादित शाखा बी।
  • 7: यदि आवश्यक हो, तो दोनों परिणामों को मिलाएं / मर्ज करें।

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

फिर निश्चित रूप से तार्किक संचालन के काम में अन्य आर्किटेक्चर की समस्या इतनी अच्छी है, जहाँ तक सस्ता और अधिक विश्वसनीय, स्टैंडराइज्ड, बेहतर ज्ञात, शक्ति-कुशल, आदि। नए वीडियोज़कार्ड सॉफ्टवेयर अनुकरण के बिना पुराने लोगों के साथ शायद ही संगत हैं, वे एक ही निर्माता से होने के बावजूद उनके बीच अलग-अलग asm निर्देश का उपयोग करें, और उस समय के लिए जब अधिकांश कंप्यूटर अनुप्रयोगों को इस प्रकार की समानांतर वास्तुकला की आवश्यकता नहीं होती है, और यहां तक ​​कि अगर उन्हें इसकी आवश्यकता होती है, तो वे मानक एपिस के माध्यम से उपयोग कर सकते हैं जैसे कि OpenCL जैसे eBusiness द्वारा या ग्राफिक्स एपिस के माध्यम से उल्लेख किया गया है। संभवतः कुछ दशकों में हमारे पास GPU होंगे जो CPU को प्रतिस्थापित कर सकते हैं लेकिन मुझे नहीं लगता कि यह जल्द ही किसी भी समय होगा।

मैं AMD APP से डॉक्यूमेंटेशन की सिफारिश करता हूं, जो उनके GPU आर्किटेक्चर पर बहुत कुछ बताता है और मैंने CUDA मैनुअल में NVIDIA के लोगों के बारे में भी देखा, जिसने मुझे इसे समझने में बहुत मदद की। मुझे अभी भी कुछ चीजों की समझ नहीं है और मुझसे गलती हो सकती है, शायद कोई ऐसा व्यक्ति जो अधिक जानता हो या तो मेरे बयानों की पुष्टि या इनकार कर सकता है, जो हम सभी के लिए बहुत अच्छा होगा।


6
अजीब सादृश्य लेकिन यह एक अच्छी बात है the fastest isn't always the fastest
रेयान

1
धन्यवाद! मुझे लगता है कि यह एक दिलचस्प विषय है क्योंकि यह कई गेम प्रोग्रामिंग अवधारणाओं को हार्डवेयर के काम करने के तरीके से बांधता है, जो आज की उच्च स्तरीय भाषाओं की भूमि में कुछ हद तक भूल गया है। कुछ अन्य चीजें हैं जिन्हें मैं जोड़ना चाहूंगा लेकिन उत्तर लिखने में कुछ समय पहले ही लग गया था इसलिए मैं इसे बाद में अपडेट करने का प्रयास करूंगा, जैसे कि सीपीयू की "संरक्षित मोड" क्षमताएं, मेमोरी बस स्पीड आदि। लेकिन मुझे उम्मीद है कि यह स्पष्ट कर देगा gpu में सब कुछ निष्पादित करने की कुछ तकनीकी कमियां।
पाब्लो एरियल

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

5
@ पाब्लो एरियल मैं इस कथन का उत्तर दे रहा हूं: "एफ 1 कारें अधिक कारों को तोड़ या मोड़ नहीं सकती हैं"। आप सुझाव देते हैं कि एफ 1 कारें केवल एक सीधी रेखा में तेजी ला सकती हैं, और मोड़ में या मंदी के दौरान बहुत अच्छी नहीं हैं। लेकिन एफ 1 कार वास्तव में "सबसे अधिक कारों" की तुलना में कहीं अधिक तेजी से ब्रेक कर सकती हैं, और उच्च गति वाले कॉर्नरिंग में उत्कृष्ट हैं।
गार्जेंटुचेट

4
यदि आप F1 कारों के बजाय
ड्रैगस्टर्स

32

GPU बहुत अच्छे हैं एक समानांतर कार्य। जो महान है ... यदि आप एक समानांतर कार्य चला रहे हैं।

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

सामान्य तौर पर, खेल बहुत कम तरीकों से खुद को थ्रेड कर सकते हैं। ग्राफिक्स को एक धागे में बंद किया जा सकता है; गेम लूप ग्राफिक्स थ्रेड पर डेटा का एक गुच्छा हिला सकता है और कह सकता है: इसे रेंडर करें। यह कुछ बुनियादी प्रक्षेप कर सकता है, ताकि मुख्य गेम लूप को ग्राफिक्स के साथ तालमेल न रखना पड़े। ध्वनि एक और धागा है; गेम लूप कहता है "यह खेलें", और यह खेला जाता है।

उसके बाद, यह सब दर्दनाक होना शुरू हो जाता है। यदि आपके पास जटिल पथप्रदर्शक एल्गोरिदम हैं (जैसे कि आरटीएस के लिए), तो आप उन्हें थ्रेड कर सकते हैं। एल्गोरिदम को पूरा करने में कुछ फ्रेम लग सकते हैं, लेकिन वे कम से कम समवर्ती होंगे। इसके अलावा, यह बहुत कठिन है।

तो आप 4 धागे देख रहे हैं: खेल, ग्राफिक्स, ध्वनि, और संभवतः दीर्घकालिक एआई प्रसंस्करण। यह बहुत नहीं है। और यह जीपीयू के लिए लगभग पर्याप्त नहीं है, जिसमें एक ही बार में उड़ान के सैकड़ों धागे हो सकते हैं। यह GPU को उनका प्रदर्शन देता है: एक ही बार में उन सभी थ्रेड का उपयोग करने में सक्षम होना। और खेल बस ऐसा नहीं कर सकते।

अब, शायद आप कुछ कार्यों के लिए "विस्तृत" जाने में सक्षम हो सकते हैं। उदाहरण के लिए, AI आमतौर पर एक दूसरे से स्वतंत्र होते हैं। तो आप एक बार में कई दर्जन AI की प्रक्रिया कर सकते हैं। जब तक आपको वास्तव में उन्हें एक-दूसरे पर निर्भर बनाने की आवश्यकता नहीं है, तब तक के लिए ठीक है। तब तुम मुश्किल में हो। भौतिक वस्तुएं समान रूप से स्वतंत्र होती हैं ... जब तक कि उनके बीच कोई बाधा न हो और / या वे किसी चीज से टकरा जाएं। तब वे बहुत निर्भर हो जाते हैं।

इसके अलावा, वहाँ तथ्य यह है कि GPU बस उपयोगकर्ता इनपुट के लिए उपयोग नहीं है, जो मुझे लगता है कि खेल के लिए महत्वपूर्ण है। ताकि प्रदान किया जा सके। इसमें OS पर बात करने की कोई सीधी फ़ाइल या कोई वास्तविक तरीका भी नहीं है; इसलिए फिर से, इसे प्रदान करने के लिए किसी तरह का रास्ता बनाना होगा। ओह, और वह सब ध्वनि प्रसंस्करण? GPUs ध्वनियों का उत्सर्जन नहीं करते हैं। इसलिए उन लोगों को सीपीयू में वापस जाना होगा और फिर साउंड चिप के लिए बाहर जाना होगा।

ओह, और GPU के लिए कोडिंग भयानक है। सही होना मुश्किल है, और एक GPU आर्किटेक्चर के लिए "सही" क्या है, दूसरे के लिए बहुत गलत हो सकता है । और यह भी सिर्फ AMD से NVIDIA के लिए स्विचन नहीं है; यह GeForce 250 से GeForce 450 पर स्विच किया जा सकता है। यह बुनियादी वास्तुकला में एक बदलाव है। और यह आसानी से आपके कोड को अच्छी तरह से नहीं चला सकता है। सी ++ और यहां तक ​​कि सी की अनुमति नहीं है; आपको मिलने वाला सबसे अच्छा ओपनसीएल है, जो सी की तरह है, लेकिन कुछ बारीकियों के बिना। पुनरावृत्ति की तरह । यह सही है: GPU पर कोई पुनरावृत्ति नहीं।

डिबगिंग? ओह, मुझे आशा है कि आपको अपनी IDE की डिबगिंग सुविधाएँ पसंद नहीं हैं, क्योंकि वे निश्चित रूप से उपलब्ध नहीं होंगे। यहां तक कि अगर आप GDB का उपयोग कर रहे, चुंबन कि अलविदा। आपको printfडिबगिंग का सहारा लेना होगा ... प्रतीक्षा करें, printfGPU पर कोई नहीं है। तो आपको मेमोरी स्थानों पर लिखना होगा और अपने सीपीयू स्टब प्रोग्राम को उन्हें वापस पढ़ना होगा।

यह सही है: मैनुअल डीबगिंग। उसके साथ अच्छा भाग्य।

इसके अलावा, उन सहायक पुस्तकालयों जो आप C / C ++ में उपयोग करते हैं? या शायद आप XNA और इसके बाद के संस्करण का उपयोग कर रहे हैं। जो कुछ भी। इससे कोई फर्क नहीं पड़ता, क्योंकि आप उनमें से किसी को भी GPU पर इस्तेमाल नहीं कर सकते । आपको खरोंच से सब कुछ कोड करना होगा। और यदि आपके पास पहले से मौजूद कोडबेस है, तो कठिन: उस कोड को फिर से लिखने के लिए समय।

तो हाँ। यह वास्तव में किसी भी प्रकार के खेल के लिए भयानक है। और यह भी काम नहीं करेगा, क्योंकि खेल अभी मदद के लिए पर्याप्त समानांतर नहीं हैं।


21

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

मुझे संदेह है कि डेवलपर्स कई कारणों से ऐसा नहीं करते हैं, जिनमें शामिल हैं:

  • वे चाहते हैं कि ग्राफिक्स यथासंभव तेज और उच्चतम गुणवत्ता वाले हों, और मूल्यवान जीपीयू संसाधनों का उपयोग करके इसमें हस्तक्षेप किया जा सके।

  • जीपीयू-विशिष्ट कोड लिखा जा सकता है, और इससे हाथ में गेम (या एप्लिकेशन) की समग्र प्रोग्रामिंग के लिए अतिरिक्त जटिलता का परिचय होगा।

  • एक GPU सामान्य रूप से नेटवर्क कार्ड, कीबोर्ड, चूहों और जॉयस्टिक जैसे संसाधनों तक पहुंच नहीं रखता है, इसलिए खेल के हर पहलू को वैसे भी संभालना संभव नहीं है।

आपके प्रश्न के दूसरे भाग के उत्तर में: हां, अन्य उपयोग हैं। उदाहरण के लिए, SETI @ होम (और शायद BOINC प्रोजेक्ट्स) जैसे प्रोजेक्ट उच्च गति जटिल गणना के लिए GPU (जैसे कि nVidia द्वारा) का उपयोग कर रहे हैं:

  अपने NVIDIA GPU http://setiathome.berkeley.edu/cuda.php पर SETI @ घर चलाएं
 

( मुझे आपका सवाल पसंद है क्योंकि यह एक दिलचस्प विचार है। )


18

सीपीयू अधिक लचीले होते हैं, आमतौर पर उन्हें प्रोग्राम करना आसान होता है, वे सिंगल थ्रेड को बहुत तेजी से चला सकते हैं।

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

इस सब के शीर्ष पर आप विभिन्न ग्राफिक्स चिप्स के लिए कोड को अनुकूलित करने में बहुत समय खर्च कर सकते हैं। जबकि OpenCL कई अलग-अलग ग्राफिक्स चिप्स के समान कोड को चलाने के लिए उपलब्ध है, आप इस लक्जरी के लिए कुछ गति लाभ का व्यापार करेंगे।

एक गेम प्रोग्रामर के नजरिए से, हम आमतौर पर यह भी चाहते हैं कि हमारा गेम कम ग्राफिक्स कार्ड वाले कंप्यूटरों पर चले। कुछ एकीकृत चिप्स में आवश्यक प्रोग्रामबिलिटी नहीं होती है, लेकिन यदि वे ऐसा करते हैं तो वे इतने धीमे होते हैं कि वे प्रोसेसर को बहुत बड़े अंतर से नहीं हराएंगे, यहां तक ​​कि जिस तरह की नौकरियों के लिए उन्हें अच्छा होना चाहिए। और निश्चित रूप से यदि आप एक गेम के लिए कम अंत वाले GPU में टैप करते हैं, तो आप ग्राफिक्स रेंडरिंग से प्रिय रूप से आवश्यक प्रसंस्करण शक्ति लेंगे।

वास्तव में संभावनाएं बहुत अच्छी हैं, लेकिन जब आप पासवर्ड को क्रैक करने के बजाय एक गेम बना रहे होते हैं, तो ज्यादातर मामलों में लाभ के मामले में व्यावहारिक मुद्दे होते हैं।


6

GPU को प्रोग्राम करना बहुत मुश्किल है। आपको GPU पर एक सूची को सॉर्ट करने के लिए खोज करना चाहिए । कई थीसिस ने इसे करने के लिए खोज की है।

एक थ्रेड के साथ सीपीयू का उपयोग करना आसान है, मल्टी-थ्रेड का उपयोग करना अधिक कठिन है, समानांतर लाइब्रेरी वाले कई कंप्यूटरों का उपयोग करें जैसा कि पीवीएम या एमपीआई कठिन है और एक जीपीयू का उपयोग करना सबसे कठिन है।


4

रैंडोल्फ रिचर्डसन ने जो जवाब दिया, उसके अलावा कुछ निश्चित कार्यक्षमताएं हैं जो GPU प्रोसेसर खुद से नहीं संभाल सकते हैं। उदाहरण के लिए, कुछ ग्राफिक्स मेमोरी प्रबंधन कमांड सीपीयू द्वारा संसाधित किए जाते हैं क्योंकि GPU उन्हें संभाल नहीं सकता है।

और एक अन्य बड़ा कारण है, GPU को मल्टीथ्रेडेड गणनाओं के लिए डिज़ाइन किया गया है। इसका मतलब है कि GPU निर्माता आसानी से कोर जोड़ सकते हैं जब भी वे कम्प्यूटेशनल पावर बढ़ाना चाहते हैं। लेकिन ऐसे कई कार्य हैं जिन्हें छोटी समस्याओं में विभाजित नहीं किया जा सकता है जैसे कि फाइबोनैचि श्रृंखला में n'th संख्या की गणना करना । इन स्थितियों में सीपीयू बहुत तेज है क्योंकि यह एकल-थ्रेडेड कार्यों के लिए अधिक अनुकूलित है।


4

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

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


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

@ रैंडॉल्फ: सीपीयू के अलग-अलग निर्देश और रजिस्टर होते हैं जो विभिन्न निम्न स्तर के डेटा प्रकारों (जैसे हस्ताक्षर किए गए बनाम अहस्ताक्षरित, अभिन्न बनाम फ्लोटिंग पॉइंट) से निपटते हैं। यह 8086 और वास्तव में सबसे आधुनिक आर्किटेक्चर पर मामला है, और यह पूरी तरह से मुफ्त में नहीं आता है।
काइलोटन

मुझे यकीन है कि वे अभी भी अंतर्निहित वास्तुकला में बहुत सारे रैखिक प्रसंस्करण करते हैं। प्रोग्रामिंग साइड से यह सिर्फ GPU के लिए एक निर्देश लेता है, लेकिन कोर समानांतर में बिल्कुल निष्पादित नहीं करते हैं क्योंकि अन्य हार्डवेयर पर उनकी निर्भरता समानांतर नहीं है जैसे कि मेमोरी से पढ़ना, शायद GPU एक सिंगल कोर में डेटा प्रदान कर सकता है एक वक़्त।
पाब्लो एरियल

3

डेवलपर्स उन सभी कार्यों के लिए GPU का उपयोग करते हैं जो वे अच्छे हैं। वे उन सभी कार्यों के लिए सीपीयू का उपयोग करते हैं जो वे अच्छे हैं। क्या आपको लगता है कि वे नहीं करते हैं?

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

सीपीयू ऐसे कार्यों में अच्छे होते हैं जो अच्छी तरह से समानांतर नहीं होते हैं और भारी मात्रा में निर्णय लेने की आवश्यकता होती है। वे केवल मध्यम लौकिक सहसंबंध के साथ उच्च स्मृति आवश्यकताओं को भी सहन कर सकते हैं। इसमें आर्टिफिशियल इंटेलिजेंस, यूजर इंटरफेस, डिस्क और नेटवर्क I / O आदि शामिल हैं। तो यह ठीक है कि आधुनिक गेम सीपीयू के लिए क्या उपयोग करते हैं।


1

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


0

यह एक पुराना धागा है, लेकिन हाल ही में प्रकाशित यह पेपर इस प्रश्न का उत्तर दे सकता है। ACM कम्प्यूटिंग सर्वे 2015 में प्रकाशित इस पेपर से पता चलता है कि CPU और GPU में से प्रत्येक के अपने अनूठे फायदे हैं और इसलिए, यह पेपर "CPU बनाम GPU डिबेट" से "CPU-GPU सहयोगी कंप्यूटिंग" प्रतिमान से दूर जाने के लिए एक मामला बनाता है।

सीपीयू-जीपीयू हेटरोजेनस कम्प्यूटिंग तकनीक का एक सर्वेक्षण

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