XNA और C # बनाम 360 का ऑर्डर प्रोसेसर है


14

इस शेख़ी को पढ़ने के बाद , मुझे लगता है कि वे शायद ठीक कह रहे हैं (क्सीनन और सेल बीई के रूप में, ब्रांच और कैश अज्ञानी कोड के प्रति अत्यधिक संवेदनशील हैं ), लेकिन मैंने सुना है कि लोग सी # के साथ खेल भी ठीक कर रहे हैं।

तो, क्या यह सच है कि XNA के साथ कुछ भी पेशेवर करना असंभव है , या पोस्टर सिर्फ गायब था जो कि XNA को खेल के विकास के लिए हत्यारा एपीआई बनाता है?

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

हालाँकि, बहुत से लोग इन बाधाओं के भीतर काम करना ठीक समझते हैं, अपने सफल गेम बनाते हैं, लेकिन प्रतीत होता है कि चूक से कोई भी समस्या नहीं है। मैंने देखा है कि कोई भी XNA खेल कुछ भी जटिल नहीं है, जो पुस्तकालयों द्वारा पहले से ही प्रदान किया गया है, या shaders द्वारा संभाला गया है। क्या यह सी # की तह सीमाओं के कारण अधिक जटिल खेल की गतिशीलता से बचा जा रहा है , या सिर्फ लोग इसे पूरा करने पर ध्यान केंद्रित कर रहे हैं ?

सभी ईमानदारी से, मुझे विश्वास नहीं हो सकता है कि AI युद्ध कुछ डेटा उन्मुख दृष्टिकोण के बिना AI की कई इकाइयों को बनाए रख सकता है, या कुछ गंदे C # हैक्स को मानक दृष्टिकोण से बेहतर बना सकता है, और मुझे लगता है कि आंशिक रूप से मेरा प्रश्न भी है, कैसे क्या लोगों ने C # को हैक कर लिया है, इसलिए वह ऐसा करने में सक्षम है जो स्वाभाविक रूप से C ++ के साथ गेम कोडर करता है?


रंत वास्तव में। आदमी पर कोई जानकारी नहीं मिल रही है और वे देख रहे हैं (वह?) एक स्टार्टअप है, मैं इसे वापस लेने के लिए किसी भी तरह की स्पष्ट जानकारी देखना चाहता हूं ...
जोनाथन कॉनेल

जिन कारणों से मैं पूरी तरह से स्टूडियो को नहीं समझ पा रहा हूं, वे XNA का उपयोग करना स्वीकार नहीं करते। लेकिन वहाँ उदाहरण के एक बहुत यहाँ हैं लिंक
ट्रिस्टन वार्नर स्मिथ

खैर, इसे वापस करने के लिए स्पष्ट जानकारी यह तथ्य है कि सीपीयू शाखा कोड में स्वाभाविक रूप से खराब है, जो कि सी # है। जो मैं जानना चाहता हूं, वह यह है कि पेशेवर XNA उपयोगकर्ता क्या कर रहे हैं इसका मतलब है कि वे C # द्वारा लगाए गए नरम सीमा को नहीं मारते हैं?
रिचर्ड फैबियन

3
मैं नीचे वोट नहीं समझ सकता ...
FxIII

3
मुझे लगता है कि बहुत से लोग अपने जुड़े हुए लेख में (कई) तकनीकी गलतियों के कारण रिचर्ड के सवाल को नकार रहे हैं, और कुछ शब्द "पेशेवर" शब्द पर "" पैसे कमाने "के बजाय" हेलो-स्तरीय उत्पादन "का मतलब है।" उत्तरार्द्ध एक गरीब विकल्प है, लेकिन केवल इसलिए नहीं कि आप लिंक से असहमत हैं - इसके बजाय इसका उत्तर देकर इसे डीबंक करें।

जवाबों:


21

ठीक है, सिर्फ उस छेद में कुछ छेद करने के लिए जिसे आपने जोड़ा था:

  • "सी # एक" जस्ट इन टाइम "दुभाषिया" पर निर्भर करता है - गलत - यह एक जेआईटी कंपाइलर है । एक विधि JITted हो जाने के बाद , संकलित कोड को प्रत्येक आह्वान के लिए पुन: उपयोग किया जाता है। संकलित कोड मूल, पूर्व संकलित कोड के रूप में तेजी से बंद करने के लिए है।
  • "क्सीनन सीपीयू एक" जगह "प्रोसेसर" है - क्या उसका मतलब "क्रम में" है? - और "क्सीनन सीपीयू की कोई शाखा भविष्यवाणी नहीं है" । उनका तात्पर्य यह है कि जेआईटी संकलन स्वाभाविक रूप से खराब कोड का उत्पादन करता है जिसे सीपीयू द्वारा फिर से आदेश दिया जाना चाहिए और बहुत सारे ब्रांचिंग का कारण बनता है - जो कि निरर्थक बकवास है । इस CPU आर्किटेक्चर पर चलने के लिए समान प्रदर्शन सलाह C ++ और C # दोनों पर लागू होती है।
  • "[JIT] को 360 पर लगातार फ्लशिंग की आवश्यकता होती है" - गलत, संकलित कोड को कैश में रखा जा सकता है जैसे किसी भी सामान्य रूप से संकलित कोड। (यदि वह पाइपलाइन फ्लश का मतलब है, तो उपरोक्त बिंदु देखें।)
  • "जेनेरिक [...] कोड पीढ़ी का उपयोग करें" - जेनरिक हर चीज की तरह JITted हैं और बाकी सभी चीजों की तरह, JITted कोड फास्ट है। जेनरिक का उपयोग करने के लिए कोई प्रदर्शन दंड नहीं है।
  • "भाषा के सभी सेक्सी बिट्स [...] को या तो शाखा भविष्यवाणी की आवश्यकता होती है ..." - यह C ++ पर भी कैसे लागू नहीं होता है? - "... या [...] इन-प्लेस कोड जेनरेशन" - क्या उसका अर्थ है JITting? क्या मैंने उल्लेख किया है कि यह तेज है? (मैं उन सभी जगहों पर नहीं जाऊँगा जहाँ डेस्कटॉप सीएलआर वास्तविक कोड जेनरेशन का उपयोग करता है - एक फीचर जो Xbox 360 द्वारा समर्थित नहीं है!)
  • "[C # के पास बड़े पैमाने पर पुस्तकालय नहीं हैं [C ++]" - सिवाय, कहें, XNA ही? और बहुत कुछ । (फिर भी, यह कुछ हद तक सही है।)

Xbox 360 पर XNA .NET कॉम्पैक्ट फ्रेमवर्क CLR के संशोधित संस्करण पर चलता है। मुझे इसमें कोई संदेह नहीं है कि यह डेस्कटॉप संस्करण के मानक तक नहीं है। JITTER शायद उतना अच्छा नहीं है - लेकिन मुझे नहीं लगता कि यह बुरा है । मुझे आश्चर्य है कि उन्होंने कचरा कलेक्टर का उल्लेख नहीं किया जो डेस्कटॉप सीएलआर की तुलना में भयानक है

(बेशक - आप एक पेशेवर विकसित खेल में कचरा कलेक्टर मार नहीं किया जाना चाहिए वैसे भी , बस के रूप में आप में आवंटन के साथ सावधान रहना चाहिए किसी भी व्यावसायिक ग्रेड खेल।)

(.NET कॉम्पैक्ट फ्रेमवर्क की वास्तविक तकनीकी चर्चा के लिए, शायद इस लेख श्रृंखला के साथ शुरू करें: अवलोकन , जेआईटी कम्पाइलर , और जीसी और ढेर ।)

जिस तरह से वह अपनी शब्दावली के बारे में पूरी तरह से अनिर्दिष्ट है, उसे यह समझने में भी मुश्किल होती है कि उसका क्या मतलब है। या तो वह अधिकतम-रैंट मोड में है, या वह नहीं जानता कि वह किस बारे में बात कर रहा है।


अब जब हम मिल गया है कि रास्ते से बाहर, यहाँ कुछ चीजें हैं जो आप कर रहे हैं है 360 पर XNA का उपयोग कर के बजाय देशी जाकर पर बाहर याद आती :

  • वास्तव में तेजी से सीपीयू फ्लोटिंग पॉइंट मैथ्स करने के लिए SIMD / वेक्टर यूनिट तक पहुंच
  • मूल भाषा कोड का उपयोग करने की क्षमता जो शायद C # से थोड़ी तेज होगी
  • आप स्मृति कैसे आवंटित करते हैं, इसके साथ थोड़ा सा आलसी होने की क्षमता
  • XBLIG गेम की 6 कोर में से केवल 4 तक ही पहुंच है (लेकिन हम अभी भी सभी 3 सीपीयू प्राप्त करते हैं, और वे पूर्ण कोर भी नहीं हैं, इसलिए हम बहुत याद नहीं करते हैं) - सुनिश्चित नहीं है कि यह गैर- XBLIG XNA पर लागू होता है खेल
  • सच में अस्पष्ट चालबाजी अस्पष्ट करने के लिए पूर्ण DirectX पहुँच

यह भी इंगित करने योग्य है कि ये केवल सीपीयू-साइड प्रतिबंध हैं। आप अभी भी पूरी तरह से मुफ्त में GPU पर चल रहे हैं।

मैंने इस उत्तर में इन बातों का वर्णन किया है कि यह एक ही प्रश्न के रूप में प्रभावी रूप से क्या है। जैसा कि मैंने उस उत्तर में उल्लेख किया है कि XNA "पेशेवर" विकास के लिए बिल्कुल उपयुक्त है

आपके द्वारा बचने का एकमात्र कारण यह है कि आप C # प्रतिभा, लाइसेंस C # इंजन को किराए पर नहीं ले सकते हैं, और मौजूदा C # कोड का पुन: उपयोग कर सकते हैं उसी तरह से आप C ++ ज्ञान के मौजूदा आधार के साथ कर सकते हैं। या इसलिए कि आप ऐसे प्लेटफ़ॉर्म को भी लक्षित कर रहे हैं जो C # का समर्थन नहीं करता है।

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


आपके अन्य सवालों के जवाब देने के लिए:

C # में कुछ भी आपको डेटा-ओरिएंटेड एप्रोच का उपयोग करने से रोकता है, ठीक उसी तरह जैसे आप C ++ में उनका उपयोग करेंगे।

C # में संकलन-समय पर स्वचालित रूप से इनलाइन कोड की क्षमता का अभाव है, और (बिना जांच किए) मैं बहुत यकीन है कि कॉम्पैक्ट CLR के JITTER इनलाइन तरीकों (डेस्कटॉप सीएलआर नहीं कर सकता) कर सकता हूं। तो प्रदर्शन-महत्वपूर्ण कोड के लिए आपको C # में मैन्युअल रूप से इनलाइन करना पड़ सकता है, जहाँ C ++ कुछ सहायता प्रदान करता है।

संभवतः एक बड़ा कारण है कि आप अक्सर सीपीयू-मैथ्स की गहन चीजों को नहीं देखते हैं जैसे कि सी # में टकराव का पता लगाने और तरल पदार्थ के सिमुलेशन में वेक्टर यूनिट तक पहुंच का अभाव है (जैसा कि ऊपर उल्लेख किया गया है)।


मैं अपने आप को याद नहीं कर सकता, लेकिन क्या सी # आपको सरल सरणियों के माध्यम से चलना बंद नहीं करता है? मुझे इसके बारे में कुछ याद है कि यह प्रथम श्रेणी के प्रकार जैसे इंट, फ्लोट, चार और मुक्केबाज़ी करता है, क्योंकि कुछ डेटा उन्मुख दृष्टिकोण उतनी तेजी से काम नहीं करते हैं जितना वे कर सकते थे। क्या वह सही है? मुझे क्या याद आ रहा है?
रिचर्ड फैबियन

2
यदि आप उन्हें किसी objectप्रकार को असाइन करते हैं तो C # बॉक्स मान-प्रकार (केवल आंतरिक नहीं - आप अपने स्वयं के मूल्य प्रकार बना सकते हैं) । और संस्करण 1 (जेनेरिक से पहले) आप उन्हें बॉक्सिंग के बिना एक गैर-सरणी कंटेनर में नहीं डाल सकते थे। लेकिन इन दिनों बॉक्स-फ्री कोड लिखना बेहद आसान है। और सीएलआर प्रोफाइलर आपको किसी भी जगह का पता लगाने की अनुमति देता है जहां आप मुक्केबाजी कर सकते हैं।
एंड्रयू रसेल

क्या जेआईटी दुभाषिया होना भी संभव है? विरोधाभासी लगता है।
कम्युनिस्ट डक

मैंने कुछ थ्रेडेड कोड तकनीक देखी हैं जिन्हें मैं JIT व्याख्या के रूप में वर्गीकृत करूंगा। यह निश्चित रूप से एक किनारे का मामला है।

1
@ रोय टी। " एक्सएनए मैथ लाइब्रेरी " (डायरेक्टएक्स का हिस्सा) और " एक्सएनए फ्रेमवर्क " बहुत दुर्भाग्यपूर्ण नामकरण टकराव के साथ दो पूरी तरह से अलग चीजें हैं। आपके द्वारा जोड़ा गया दस्तावेज़ XNA फ्रेमवर्क पर लागू नहीं होता है। XNA फ्रेमवर्क गणित के प्रकार SIMD / वेक्टर इकाई का उपयोग नहीं करते हैं
एंड्रयू रसेल

5

आपको 'पेशेवर' को परिभाषित करना होगा। क्या आप गुस्से में पक्षियों, पौधों बनाम लाश, आदि कर सकते हैं? पूर्ण रूप से। क्या आप Crysis 2, COD, हेलो कर सकते हैं? मुझे शक है। C # का उपयोग करना वास्तव में केवल उन खेलों को प्रभावित करने वाला है जो बहुत CPU गहन हैं और मेमोरी के प्रत्येक अंतिम बाइट को निचोड़ने की आवश्यकता है (आप कचरा संग्रह से बाहर निकल जाते हैं), इसलिए एक भयानक बहुत कुछ है जो आप अभी भी कर सकते हैं।

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

यदि आप एक अद्भुत खेल के साथ आते हैं और आप एक्सएनए के साथ क्या कर सकते हैं की सीमाओं में भागते हैं, तो मैं सीधे एमएस से संपर्क करने का सुझाव दूंगा, अगर विचार वास्तव में बहुत अच्छा है, तो वे आपको पूर्ण विकसित विकास पर अपना हाथ लाने दे सकते हैं। किट।


हालांकि आप एक भद्दा ड्यूक नुक्म सीक्वल बना सकते हैं? ;)
जोनाथन कॉनेल

1
अधिकांश बेंचमार्क यह पाते हैं कि C # कोड समतुल्य C कोड (PC पर) की तुलना में 30% और 70% के बीच धीमा है। जब आप विचार करते हैं कि अधिकांश गेम सीपीयू-बाउंड नहीं हैं, और यह भी कि C # कोड के महत्वपूर्ण हिस्से असुरक्षित कोड का उपयोग करके लिखे जा सकते हैं जो समकक्ष C कोड की तुलना में लगभग तेज या तेज चल सकते हैं (तेजी से क्योंकि JIT के पास बहुत अधिक जानकारी उपलब्ध है संकलक की तुलना में, इसलिए यह बेहतर अनुकूलन विकल्प बना सकता है) , आप देखते हैं कि एएए गेम्स के लिए सी # पूरी तरह से सक्षम है।
ब्लूराजा - डैनी पफ्लुगुफ्ट

@BlueRaja: Xbox 360 पर अधिकांश XNA विकास के लिए असुरक्षित कोड एक विकल्प नहीं है।

1
@BlueRaja: यह इंगित करने योग्य है कि unsafeकोड अक्सर सुरक्षित समकक्ष की तुलना में धीमा होता है, क्योंकि यह CLR कर सकने वाले अनुकूलन की संख्या को कम करता है। आपको इसे मापना होगा।
एंड्रयू रसेल

2
@Blueraja "जब आप मानते हैं कि अधिकांश गेम सीपीयू-बाउंड नहीं हैं" उद्धरण की बहुत आवश्यकता है? मैंने एक पेशेवर रूप से विकसित गेम पर काम नहीं किया है जो सभी कुल्हाड़ियों में बंधे नहीं हैं। अगर ऐसा नहीं होता तो हम मशीन के उस हिस्से पर भार को शिफ्ट करने का कोई तरीका खोज लेते!
रिचर्ड फैबियन

3

सरल तथ्य यह है कि आपको एक दिलचस्प गेम बनाने के लिए एक उच्च बहुभुज गणना, पूर्ण HDR प्रकाश या दुनिया की सबसे दिलचस्प भौतिकी की आवश्यकता नहीं है, और यदि आपके गेम प्लान में कोई भी शामिल नहीं है, तो क्यों नहीं एक तेजी से आगे बढ़ें विकास समय समाधान?

अधिक पेशेवर खेलों में फ़ेसिक्स मॉडल और एनीमेशन सिस्टम हैं

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


1
उच्च बहुभुज गिनती और HDR ग्राफिक्स कार्ड पर गिर जाएगा, नहीं? इसलिए आपको C # और C ++ में बिल्कुल समान प्रदर्शन की उम्मीद करनी चाहिए।
ब्लूराजा - डैनी पफ्लुगुफ्ट

@BlueRaja: उन लोगों के लिए भी सीपीयू की लागत है, और
मेमोरी-

कम या ज्यादा, देशी कोड में होने की तुलना में ग्राफिक्स के लिबास पर थोड़ा अधिक ओवरहेड है। दूसरी ओर, आधुनिक ग्राफिक्स लाइब्रेरी बहुत मुश्किल से प्रति फ्रेम ड्राइवर में कॉल की संख्या को कम करने की कोशिश करते हैं, क्योंकि यह मुख्य बाधाओं में से एक है।
drxzcl
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.