2012-05-16 14 views
6

हमें एक पीसी से 8 से 12 मॉनीटर ड्राइव करने की ज़रूरत है, सभी एक एकल 3 डी दृश्यग्राफ के विभिन्न दृश्य प्रस्तुत करते हैं, इसलिए कई ग्राफिक्स कार्ड का उपयोग करना होगा। हम वर्तमान में dx9 पर चल रहे हैं, इसलिए उम्मीद है कि यह आसान बनाने के लिए dx11 पर जाएं।डायरेक्टएक्स 11: एकाधिक एडेप्टर के साथ-साथ उपयोग

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

+0

क्या आप विक्रेता पुस्तकालयों का उपयोग कर रहे हैं?वीआरएएम उपयोग और स्थानांतरण एक proc/कई के साथ क्या दिखता है? क्या आप प्रत्येक कार्ड पर फुलस्क्रीन अनन्य चल रहे हैं, और क्या यह कुछ भी नहीं बदलता है? क्या आप सभी को एक साथ फ्रेम भेज रहे हैं (एकाधिक रेंडर थ्रेड)? – ssube

+0

@peachykeen: यह सी ++ से डायरेक्टएक्स का उपयोग कर रहा है। हमने कुछ शुरुआती परीक्षण किए हैं लेकिन एक हफ्ते तक कोर काम शुरू नहीं करेंगे, इसलिए मैंने सोचा कि मैं अब यह सवाल पूछूंगा कि क्या कोई वहां जवाब देने के लिए हुआ है - हमने नहीं किया है किसी भी गहराई से प्रोफाइलिंग या डिबगिंग अभी तक। हमें खिड़की वाले मोड में चलाने की जरूरत है क्योंकि हम डेस्कटॉप ऐप हैं, और प्रत्येक विंडो को अपने धागे से स्वतंत्र रूप से प्रस्तुत किया जा रहा है (जो धीरे-धीरे rensders) या प्रक्रिया (जो तेजी से प्रस्तुत करता है)। हम कई प्रक्रियाओं पर हमारे प्रतिपादन को विभाजित कर सकते हैं, लेकिन यह आवश्यक नहीं होना चाहिए। –

+0

क्या आपके पास VSync सक्षम है? वास्तव में मैंने आपके जैसा ही उपयोग केस (लगभग) में कुछ गंभीर मंदी देखी है। VSync के बिना यह ठीक है। – catflier

उत्तर

1

IDXGIFactory के साथ उपलब्ध उपकरणों का आकलन करें, प्रत्येक के लिए ID3D11Device बनाएं और फिर उन्हें विभिन्न धागे से खिलाएं। ठीक काम करना चाहिए।

+0

धन्यवाद एक्सेल। समस्या यह है कि जब हम ऐसा करते हैं, तो हमें डेमो दृश्य से प्रति सेकंड लगभग 30 फ्रेम मिलते हैं, लेकिन यदि हम प्रत्येक एडाप्टर को एक अलग प्रक्रिया से ड्राइव करते हैं तो हमें उसी प्रतिपादन भार के लिए लगभग 600 एफपीएस मिलते हैं। यह संभव है कि हमारे शुरुआती त्वरित परीक्षणों में एक बग था, या वास्तविक दुनिया के उदाहरण में यह वास्तव में ठीक काम करेगा, लेकिन हम चिंतित हैं कि हम केवल एक रेंडरर में बहुत प्रयास कर सकते हैं ताकि यह पता चल सके कि इसे विभाजित करना है एडेप्टर से पूर्ण प्रदर्शन प्राप्त करने के लिए बहु-प्रक्रिया। जैसा कि हमारे पास थोड़ा सा समय है, मैंने सोचा कि मैं यहां पूछूंगा और कुछ दिनों में वापस आऊंगा ... –

+0

क्या यह डी 3 डी 9 ओडर डी 3 डी 11 के साथ है? एक ड्राइवर समस्या भी हो सकती है, जो केवल प्रति थ्रेड की बजाय प्रति प्रक्रिया का एक उदाहरण बनाता है। आप किस कार्ड का उपयोग करते हैं? –

+0

यह डीएक्स 11 है, एनवीडिया जीटी 220, एटीआई राडेन एचडी 6700 जैसे ब्रांड नए कार्ड का उपयोग कर। –

2

शायद आपको डायरेक्टएक्स को अपग्रेड करने की आवश्यकता नहीं है।
this article देखें।

+0

धन्यवाद, लेकिन अब डीएक्स 9 लगभग 200 साल पुराना है, हम वास्तव में इसमें एक नाखून छड़ी करना चाहते हैं और डीएक्स 11 सुविधाओं का उपयोग शुरू करना चाहते हैं, हमारी सभी Win7 लक्ष्य मशीनों आदि पर डीएक्स 9 स्थापित करने से बचें। –

2

मुझे लगता है कि आप पहले से ही एक समाधान करने के लिए आ गया है, लेकिन मैंने सोचा कि यह जो इस सवाल पर आता है किसी और के लिए अपने खुद के हाल के अनुभवों में फेंक करने के लिए अच्छा होगा ...

हाँ, आप कर सकते हैं किसी भी प्रक्रिया से एडाप्टर और आउटपुट की किसी भी संख्या को ड्राइव करें।

DXGI और DX11 में:

प्रत्येक ग्राफिक्स कार्ड एक "एडाप्टर" है यहाँ कुछ जानकारी है कि उपयुक्त हो सकती हैं। प्रत्येक मॉनिटर एक "आउटपुट" है। इनके माध्यम से गणना के बारे में अधिक जानकारी के लिए here देखें।

एक बार जब आप एडाप्टर का उपयोग करना चाहते हैं तो पॉइंटर्स हो जाएं, तो प्रत्येक एडाप्टर के लिए D3D11CreateDevice का उपयोग करके एक डिवाइस (ID3D11Device) बनाएं। शायद आप अपने प्रत्येक डिवाइस के साथ बातचीत के लिए एक अलग थ्रेड चाहते हैं। इस धागे में एक विशिष्ट प्रोसेसर एफ़िनिटी हो सकती है यदि इससे आपके लिए चीजों की गति में मदद मिलती है।

प्रत्येक एडाप्टर के पास अपना डिवाइस होने के बाद, प्रत्येक आउटपुट के लिए swap chain और render target बनाएं। आप प्रत्येक आउटपुट के लिए भी create your depth stencil view पर भी हो सकते हैं।

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

प्रतिपादन के लिए, आपको प्रत्येक डिवाइस के प्रत्येक आउटपुट के माध्यम से पुनरावृत्त करने की आवश्यकता होगी। प्रत्येक आउटपुट के लिए OMSetRenderTargets का उपयोग कर वर्तमान आउटपुट के लिए बनाए गए लक्ष्य को प्रस्तुत करने के लिए डिवाइस के रेंडर लक्ष्य को बदलें। दोबारा, यदि आप चाहें तो प्रत्येक डिवाइस को एक अलग थ्रेड पर चलाया जा सकता है, इसलिए प्रत्येक थ्रेड/डिवाइस जोड़ी के प्रतिपादन के लिए आउटपुट के माध्यम से अपना पुनरावृत्ति होगा।

Display Different images per monitor directX 10

DXGI and 2+ full screen displays on Windows 7

http://msdn.microsoft.com/en-us/library/windows/desktop/ee417025%28v=vs.85%29.aspx#multiple_monitors

गुड लक:

यहाँ लिंक है कि सहायक हो सकता है जब इस प्रक्रिया से गुजर रही का एक समूह रहे हैं!

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