2010-10-12 18 views
12

क्या कुछ मूल्यों की गणना करने के लिए शेडर का उपयोग करना संभव है और फिर उन्हें आगे के उपयोग के लिए वापस लौटाएं?गणना के लिए शेडर का उपयोग

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

इस तरह से मैं इस बारे में सोच रहा हूं, हालांकि अन्य तरीका भी हो सकता है, जो मुझे अनजान है। मुझे खुशी होगी अगर कोई मुझे यह समझा सकता है, क्योंकि मैंने जीएलएसएल के बारे में कुछ किताबें पढ़ी हैं और अब मैं अधिक जटिल शेडर्स प्रोग्राम करना चाहता हूं, और मैं इस समय असंभव तरीकों से छुटकारा नहीं लेना चाहूंगा।

धन्यवाद

उत्तर

6

शानदार सवाल! ग्राफिक्स प्रसंस्करण इकाइयों (GPGPU) पर सामान्य प्रयोजन कंप्यूटिंग की बहादुर नई दुनिया में आपका स्वागत है।

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

इस प्रयोजन के लिए बनाया उपकरण, OpenCL और CUDA हैं सबसे विशेष रूप से। वे जीपीजीपीयू की बहुत मदद करते हैं ताकि इस तरह के प्रोग्रामिंग लगभग सीपीयू प्रोग्रामिंग के रूप में दिखें।

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

मैं, CUDA के साथ शुरू करने के लिए सलाह देते हैं, क्योंकि यह है सबसे परिपक्व एक: http://www.nvidia.com/object/cuda_home_new.html

+0

जैसा कि टेस्टलिनो ने लिखा था, सीयूडीए एनवीडिया विशिष्ट है। जैसा कि मैं राडेन चला रहा हूं, क्या मैं धीमी गति से पीड़ित नहीं हूं, या राडेन पर कुडा चलाने के लिए भी संभव है? ओपनसीएल कम प्रभावी है या आप इसे पहले इस्तेमाल करने की सिफारिश क्यों नहीं करते? – Raven

+0

@ रेवेन हां, सीयूडीए पूरी तरह से एनवीडिया विशिष्ट है।अगर मैं चुनना चाहता था तो मैं CUDA + nVidia पसंद करूंगा। चूंकि आपके पास अति है, आपको ओपनसीएल चुनना है। जहां तक ​​मुझे पता है कि सीयूडीए अधिक परिपक्व है, उपकरण बेहतर हैं, आदि। प्रदर्शन के संदर्भ में मुझे नहीं लगता कि इसमें एक महत्वपूर्ण अंतर है। – Andrey

+0

@ रेवेन, अगर मैं ओपन जीएल का उपयोग कर रहा था, तो मैं डायरेक्ट कंप का चयन करूँगा, अगर मैं डायरेक्ट एक्स का उपयोग कर रहा था, ओपन सीएल। मैंने कहा कारण के लिए कभी भी CUDA का उपयोग नहीं करेंगे। आप यह सुनिश्चित नहीं कर सकते कि आपके आवेदन का उपयोग करने वाले प्रत्येक व्यक्ति के पास एनवीआईडीआईए कार्ड है। – testalino

0

मेरे सर्वोत्तम अनुमान BehaveRT पर भेजने की जो एक पुस्तकालय behavorial मॉडल के लिए GPUs का दोहन करने के लिए बनाया है किया जाएगा। मुझे लगता है कि यदि आप लाइब्रेरी में अपने संशोधनों को तैयार कर सकते हैं, तो आप इसके अमूर्तता से लाभ प्राप्त कर सकते हैं

आपके सीपीयू और जीपीयू के बीच आगे और आगे जाने वाले डेटा के बारे में, मैं आपको दस्तावेज़ ब्राउज़ करने देता हूं, मुझे यकीन नहीं है इसके बारे में

2

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

ये ग्राफिक्स कार्ड पर सामान की गणना के लिए विशेष libaries हैं। मैं इसके लिए एक सामान्य 3 डी एपीआई का उपयोग नहीं करता, यह सोचता है कि कुछ कामकाज के साथ यह संभव है।

1

अब आप shaders कि मेजबान में पढ़ा जा सकता है में मान लिखने के लिए ओपन में शेडर बफर वस्तुओं का उपयोग कर सकते हैं।

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