मैं अपने ग्रिड से अधिक प्रोसेसिंग पावर प्राप्त करने की कोशिश कर रहा हूं।
मैं सभी cpus / cores का उपयोग कर रहा हूं, क्या GPU को C # के साथ उपयोग करना संभव है।
किसी को भी किसी भी पुस्तकालय पता है या कोई नमूना कोड मिला है?
मैं अपने ग्रिड से अधिक प्रोसेसिंग पावर प्राप्त करने की कोशिश कर रहा हूं।
मैं सभी cpus / cores का उपयोग कर रहा हूं, क्या GPU को C # के साथ उपयोग करना संभव है।
किसी को भी किसी भी पुस्तकालय पता है या कोई नमूना कोड मिला है?
जवाबों:
[ संपादित करें OCT 2017 क्योंकि यह उत्तर काफी पुराना है ]
इनमें से अधिकांश उत्तर काफी पुराने हैं, इसलिए मैंने सोचा कि मैं एक अद्यतन सारांश दूंगा जहां मुझे लगता है कि प्रत्येक परियोजना है:
GPU.Net (TidePowerd) - मैंने 6 महीने पहले ऐसा करने की कोशिश की थी, और यह काम कर रहा था हालांकि इसमें थोड़ा सा काम था। संकलित समय में सी # कर्नेल कोड को कोडा में कनवर्ट करता है। दुर्भाग्य से उनकी वेबसाइट डाउन हो गई है और उनके गितुब को कुछ वर्षों से अपडेट नहीं किया गया है, जो यह संकेत दे सकता है कि परियोजना मृत है ...।
Cudafy - खुला स्रोत और उपयोग करने के लिए बहुत आसान है। रनटाइम पर cuda के लिए C # कर्नेल कोड को परिवर्तित करता है (क्रमबद्ध और कैश करने की क्षमता के साथ)। सीपीयू (अधिकतर डीबगिंग के लिए) पर समान कर्नेल कोड आसानी से चला सकते हैं। कई GPU का समर्थन करता है। यहां दूसरों की तुलना में अधिक उदाहरण उपलब्ध हैं। अन्य उत्तरों द्वारा निर्दिष्ट बॉयलरप्लेट कोड न्यूनतम है, और मेरे मामले में कम से कम मेरी समझ से मदद मिली कि कोड कैसे काम करता है। हालांकि कोडा / एनवीडिया। दुर्भाग्य से, ऐसा लगता है कि उन्होंने कुछ वर्षों के लिए अपने समाधानों को अपडेट नहीं किया (2015 में नवीनतम प्रतिबद्ध - कोडा 7.0 का समर्थन)।
हाइब्रिडाइज़र । वाणिज्यिक समाधान CUDA को C # संकलित कर रहा है। विज़ुथ स्टूडियो मार्केटप्लेस पर मुफ्त सामुदायिक संस्करण और जीथब पर नमूने प्रदान करता है ।
उपभोक्ता GPUS के लिए एक निःशुल्क सामुदायिक संस्करण के साथ AleaGPU वाणिज्यिक समाधान। विवरण के लिए डैनियल की टिप्पणियां देखें।
ब्रह्मा - OpenCL के माध्यम से LINQ अभिव्यक्तियाँ चलाता है (इसलिए AMD का समर्थन करता है)। बहुत अधिक दस्तावेज / उदाहरण नहीं। आखिरी अपडेट 2011 में।
सी $ - अंतिम विकास 10 साल पहले खत्म हो गया था ...
Microsoft त्वरक - समान रूप से ऐसा नहीं लगता है कि इसे सक्रिय रूप से किसी भी लंबे समय तक विकसित किया जा रहा है।
कुछ अन्य ( C ++ AMP , OpenTK - dead / Cloo ) - इनमें से कई सिर्फ बाइंडिंग हैं - यानी आप C # से GPU कॉल करने में सक्षम हैं, लेकिन आपका कर्नेल कोड (कोड जो वास्तव में GPU पर चलाया जाता है) को लिखना होगा। C या OpenCL, जिसका अर्थ है कि आपको दूसरी भाषा का उपयोग (और सीखना) करना चाहिए।
जैसा कि मैंने कहा, मैं अन्य सभी पर कुडाफी की सिफारिश करूंगा - अगर यह ओपनसीएल के साथ-साथ कूडा पर भी चल सकता है तो यह सही होगा।
EDIT SEP 2013 Cudafy अब आपको CUDA और OpenCL दोनों के लिए संकलन करने की अनुमति देता है , इसलिए सभी GPU पर समान C # कोड चलाएगा। यह शानदार लगता है, हालांकि मैंने अभी तक OpenCL संकलन का परीक्षण नहीं किया है।
मुझे ब्रह्मा मिला ... इसमें एक GPGPU प्रदाता भी है जो GPU पर तरीकों को चलाने की अनुमति देता है ... प्रश्न के लिए धन्यवाद ... आज कुछ सीखा। :)
क्या मैं अन्वेषण के लिए संभावित एवेन्यू के रूप में एक्सएनए गेम स्टूडियो की सिफारिश कर सकता हूं? यह स्पष्ट रूप से गेम लिखने के लिए तैयार है, लेकिन आपको अपने ग्राफिक्स कार्ड तक पहुंच प्राप्त करने की क्षमता प्रदान करता है और क्षमता विकास कार्यों के लिए बेहतर पहुंच और shader विकास पहले से ही उपलब्ध था, कहते हैं, प्रबंधित DirectX। WinForms और XNA को हाइब्रिड अनुप्रयोगों में संयोजित करने के तरीके भी हैं:
http://www.ziggyware.com/news.php?readmore=866
आपको shader प्रोग्रामिंग सीखने में कुछ प्रयास करना होगा (XNA HLSL का समर्थन करता है), लेकिन यह विक्रेता-विशिष्ट समाधान जैसे nVidia के CUDA को सीखने की तुलना में एक सरल तरीका हो सकता है। लाभ यह है कि आप 100% प्रबंधित वातावरण में कार्यक्रम कर सकते हैं। यहाँ कुछ HLSL लिंक दिए गए हैं:
http://www.ziggyware.com/weblinks.php?cat_id=9
GPGPU साइट सामान्य प्रयोजन GPU प्रोग्रामिंग के लिए एक अनुशंसित गंतव्य है:
शुभकामनाएँ!
कैसे http://www.tidepowerd.com/ GPU.NET के बारे में ?
यहाँ एक और एक है: CUDAfy । यह GPU.Net की तरह लगता है, इसमें एक विधि-विशेषता जितनी सरल होती है, संपूर्ण विधि GPU पर चलने का कारण बन सकती है। लेकिन GPU.Net के विपरीत, CUDAfy स्वतंत्र और मुक्त-स्रोत है।
GPU.Net को बॉयलरप्लेट कोड की आवश्यकता नहीं है, हालांकि (उनके डॉक्स के अनुसार, यह "बिल्ड-टूल द्वारा स्वचालित रूप से इंजेक्ट किया जाता है") है , जबकि CUDAfy करता है।
यहां CUDAfy के साथ एक एप्लिकेशन बनाने का एक उदाहरण है।
खैर यह एक बहुत पुराना सवाल है, और जब से यह पूछा गया है कि चीजें बहुत बदल गई हैं।
GPU कोड लिखने के लिए .Net का उपयोग करने के लिए एक और विकल्प, जिसे किसी ने भी Alea GPU के उत्तर में नहीं बताया है । इसमें C #, F # और VB शामिल हैं।
.NET और मोनो के लिए व्यावसायिक GPU सॉफ्टवेयर विकास वातावरण। सचमुच क्रॉस-प्लेटफ़ॉर्म
F # आधिकारिक साइट में, Alea GPGPU प्रोग्रामिंग में F # का उपयोग करने के लिए पहला विकल्प है।
इस ढांचे मैं के अपने व्यापक सूची पर एक नज़र डालें सुझाव है पता करने के लिए प्राप्त करने के लिए उदाहरण ।
ब्रह्मा के अलावा, सी $ (उच्चारण "सी बक्स") पर एक नज़र डालें । उनके कोडप्लेक्स साइट से :
[सी $] का उद्देश्य आधुनिक जीपीयू और सीपीयू पर सहज समानांतर प्रोग्रामिंग के लिए एक एकीकृत भाषा और प्रणाली बना रहा है।
यह C # पर आधारित है, आलसी का मूल्यांकन किया गया है, और कई त्वरक मॉडल को लक्षित करता है:
वर्तमान में इच्छित आर्किटेक्चर की सूची में जीपीयू, मल्टी-कोर सीपीयू, मल्टी-जीपीयू (एसएलआई, क्रॉसफायर) और मल्टी-जीपीयू + मल्टी-सीपीयू हाइब्रिड आर्किटेक्चर शामिल हैं।
शहर में एक नया Microsoft समाधान है - C ++ AMP ( यहाँ परिचय )।
C # से उपयोग P / Invoke के माध्यम से होगा, जैसा कि यहां डेस्कटॉप ऐप्स के लिए डेमो किया गया है , और यहां (न-कॉल-इट) मेट्रो ऐप्स के लिए।
संपादित करें: मुझे ध्यान देना चाहिए कि सी ++ एएमपी में एक खुला विनिर्देश है , जिसका अर्थ है कि यह केवल एमएस कंपाइलर के लिए, या केवल विंडोज के लिए आवश्यक नहीं है।
संपादित करें: जाहिरा तौर पर, प्रौद्योगिकी अब "रखरखाव मोड" में है, जिसका अर्थ है कि वे बग को ठीक कर रहे हैं, लेकिन सक्रिय रूप से विकसित नहीं हो रहे हैं।
सेंटरस्पेस सॉफ़्टवेयर में उनके NMath पुस्तकालयों में आप # C प्रोजेक्ट में जोड़ सकते हैं GPU- संचालित संगणना है । यह एक वाणिज्यिक उत्पाद है।
यदि आप अपने स्वयं के अल्गोर्टिम्स को लागू करने जा रहे हैं, जिसे कस्टम कर्नेल की आवश्यकता है:
मैंने हाल ही में इस github रिपॉजिटरी में मेरा एक ओपन-सोर्स प्रोजेक्ट अपलोड किया है जो OpenCL का उपयोग करता है।
यह क्या करता है (आप इसके विकी पेज से भी जांच कर सकते हैं) है, कई OpenCL- सक्षम उपकरणों और उपयोगकर्ता से एक कर्नेल स्ट्रिंग का चयन करना और फिर C # या C ++ सरणी रैपर बनाना, सभी का उपयोग करके गणना करना, एक ऑटो-लोड-बैलेंसर की मदद से और पीसी से अच्छी दक्षता प्राप्त करने के लिए पाइप लाइनर (विलंब को छिपाने के लिए)।
यहां इसके उपयोग का एक उदाहरण है (सभी उपकरणों के लिए विभाजित 1024 कार्यदिवस, प्रत्येक एक ही कोड चल रहा है लेकिन विभिन्न डेटा और थ्रेड का उपयोग करें):
// select all GPUs and all CPUs in same pc
ClNumberCruncher gpuCpu = new ClNumberCruncher(AcceleratorType.GPU | AcceleratorType.CPU, @"
__kernel void distributeTanh(__global float * data,__global int * data2)
{
int threadId=get_global_id(0);
data[threadId]=tanh(data[threadId]);
data2[threadId]=threadId;
}
");
// a wrapper that can hold C# or C++ arrays
ClArray<float> data = new ClArray<float>(1024);
ClArray<int> data2 = new int[1024];
// load-balances "distributeTanh" on all devices more fairly
// at each repeatation of this line with same compute-id(1 here)
data.nextParam(data2).compute(gpuCpu, 1, "distributeTanh", 1024);
// threadId in kernel receives unique continuous id value for all work
// either it is in cpu or gpu doesn't matter
// compute method also has parameters to enable pipelining to
// elliminate buffer copy latencies or compute latencies
जब सभी का उपयोग नहीं किया जाता है, तो वे सभी सी ++ संसाधनों को अपने विनाशकों के साथ छोड़ देते हैं।
लेकिन यह वह परिपक्व नहीं है, इसलिए गितुब मुद्दों के टैब पर किसी भी "मुद्दे" को जोड़ने के लिए स्वतंत्र महसूस करें। मल्टी-पीसी-क्लस्टर प्रासंगिक वर्ग काम नहीं कर रहे हैं और अभी तक अंग्रेजी में अनुवादित नहीं हैं, लेकिन यह कम से कम एकल पीसी में सभी उपकरणों का उपयोग कर सकते हैं।
WPF भी GPU का उपयोग करता है और आप HLSL का उपयोग करके कस्टम शेड जोड़ सकते हैं।