2010-01-20 10 views
9

निष्पादन अक्षम बिट को ध्यान में रखते हुए उच्च स्तर के प्रबंधित वातावरण जैसे वीबी.NET 2008 या C# से मूल प्रोसेसर के खिलाफ निर्देश निष्पादित करने का अनुशंसित तरीका क्या है। इसके अलावा किसी ने ग्राफिक्स प्रोसेसर के खिलाफ जीपीयू निर्देशों को निष्पादित करने में समान हासिल किया है?प्रबंधित कोड से सीपीयू/जीपीयू निर्देश निष्पादित करना

+2

असली सवाल यह है कि: आप क्या करने की कोशिश कर रहे हैं? आप GPU का उपयोग CUDA.NET (http://www.hoopoe-cloud.com/Solutions/CUDA.NET/Default.aspx) के साथ कर सकते हैं। –

+0

उद्देश्य कस्टम गणना को यथासंभव नंगे धातु के करीब चलाने के लिए है लेकिन एक प्रबंधित वातावरण से लॉन्च किया गया है। – PeanutPower

+0

संभावित डुप्लिकेट [सी # के साथ जीपीयू का उपयोग] [http://stackoverflow.com/questions/375011/utilizing-the-gpu-with-c-sharp) –

उत्तर

8

वहाँ पी/आह्वान करने के लिए वापस लाने में या अपने स्वयं के सी ++ रैपर लिखे बिना सी # के लिए कुछ GPU विकल्प, सीधी पहुंच के लिए कर रहे हैं:

  • Brahma काफी रोचक है। यह एक अनुकूलित LINQ प्रदाता के माध्यम से सीधे GPU तक पहुंच प्रदान करता है। कोड में GPU पर चलने वाले अत्यधिक कम्प्यूटेशनल विधियों के कुछ नमूने शामिल हैं, सभी LINQ के माध्यम से सी # में लिखे गए हैं।
  • SlimDX सभी प्रमुख डायरेक्टएक्स कार्यक्षमता के लिए एक अच्छा .NET wrapper प्रदान करता है। कस्टम शेडर्स के साथ, आप डायरेक्टएक्स के माध्यम से जीपीयू पर गणना कर सकते हैं। इसमें डीएक्स 11 समर्थन भी शामिल है, इसलिए आप सीधे कंप्यूटर्स शेडर्स का उपयोग कर सकते हैं (यदि आपके पास हार्डवेयर है)।
  • आप CUDA.NET के माध्यम से CUDA तक पहुंच सकते हैं।
  • आप ओपनसीएल का उपयोग OpenCL.NET के माध्यम से कर सकते हैं।

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

+0

धन्यवाद कि मोनो.आईएमडी लिंक अद्भुत है – PeanutPower

2

जो भी निर्देश आप चाहते हैं उसके साथ अप्रबंधित .dll लाइब्रेरी बनाएं और इसे कॉल करने के लिए P/Invoke का उपयोग करें।

3

यह एक विकल्प नहीं है। आपको डीएलएल में एक फ़ंक्शन को P/Invoke करना होगा जो एमएएसएम द्वारा उत्पन्न किया गया था या इनलाइन असेंबली या इंट्रिनिक्स का उपयोग करके अप्रबंधित सी/सी ++ में लिखा गया था। या सी ++/सीएलआई कंपाइलर का उपयोग करें और #pragma प्रबंधित के साथ मिश्रित मोड कोड जेनरेट करें।

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

प्रबंधित GPU कोड के लिए CUDA को देखें।

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