2008-09-02 17 views
10

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

उत्तर

20

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

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

MIMD या SPMD त्वरक का एक उभरता हुआ वर्ग अनुसंधान समुदाय में अब कम से देखा जा रहा है। मैं सॉफ्टवेयर, रीयल-टाइम रेट्रैसिंग के लिए लॉजिकल प्लेटफॉर्म के रूप में इन्हें देखता हूं।

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

9

यह निश्चित रूप से किया जा सकता है, किया गया है, और वर्तमान में रेयट्रैसिंग और कुडा गुरुओं के बीच एक गर्म विषय है। मैं http://www.nvidia.com/object/cuda_home.html

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

आपका प्रश्न आपके अनुभव स्तर या आपके प्रोजेक्ट के लक्ष्यों के बारे में स्पष्ट नहीं था। यदि यह आपका पहला रे ट्रैसर है और आप बस सीखने की कोशिश कर रहे हैं, तो मैं कूडा से बचूंगा - यह आपको विकसित करने के लिए 10x लंबा लगेगा और आपको शायद अच्छी गति नहीं मिलेगी। यदि आप एक अनुभवी अनुभवी कुडा प्रोग्रामर हैं और एक चुनौतीपूर्ण परियोजना की तलाश में हैं और रे ट्रेसिंग सीखना एक मजेदार बात है, हर तरह से, इसे क्यूडा में करने का प्रयास करें। यदि आप एक वाणिज्यिक ऐप बना रहे हैं और आप प्रतिस्पर्धी गति बढ़त की तलाश में हैं - ठीक है, तो शायद इस बिंदु पर एक बकवास शूट हो सकता है ... आपको एक प्रदर्शन बढ़त मिल सकती है, लेकिन अधिक कठिन विकास की कीमत पर और विशेष हार्डवेयर पर निर्भरता।

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

+0

मैं अपनी पहली raytracer निर्माण एक छोटी परियोजना है और किसी भी CUDA काम कभी नहीं किया है तो मैं कुछ भी महान बनाने के लिए एक गरीब स्थिति में हूँ, लेकिन अगले वर्ष की तुलना में मैं GPGPU तकनीक के साथ काम कर रहा हूँ। इससे मुझे सीयूडीए से परिचित होने की ओर ले जाता है और मैं सोच रहा था कि मैं इस ज्ञान का उपयोग कैसे कर सकता हूं। –

+0

आप निश्चित हैं यह एक शर्मनाक समानांतर समस्या है? प्रतिबिंब और सामग्री प्रहस्तन में बदलाव के अगले ऑब्जेक्ट को खोजने के लिए सुलझाने (के रूप में मैट जम्मू से कहा) लगते हैं जैसे वे समानांतरवाद काफी तोड़ सकता। लेकिन अगर मैं गलत हूं तो कृपया मुझे सही करें। –

4

एनवीडिया उनके सम्मेलन NVision इस साल में CUDA में एक किरण-ट्रेसर demo'ed। यहां इसके बारे में उनकी स्लाइड के लिए एक लिंक है।

http://www.nvidia.com/object/nvision08-IRT.html

+0

बहुत बहुत धन्यवाद, यह वास्तव में दिलचस्प चीजें है! –

6
+0

वास्तव में बहुत अच्छा है। मुझे रे ट्रैसर के लिए सीयूडीए के साथ काम नहीं करना पड़ा, लेकिन सी # के साथ रहा। यह प्रति फ्रेम सेकंड की तरह था, हालांकि :) –

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