ArcGIS फ़ंक्शन का कस्टम कार्यान्वयन


9

मैं यह पता लगाना चाहूंगा कि आर्कगिस फ़ंक्शन के कस्टम कार्यान्वयन को बनाने में क्या लगता है। विशेष रूप से, मैं इसे तेजी से चलाने के लिए GeoAnalyst.ISurfaceOp2.Visibility () को लागू करना चाहूंगा । अभी, यह दृश्यता () के लिए प्रति कॉल ~ 3 सेकंड ले रहा है। मेरी सीमित समझ से, अड़चन फाइल सिस्टम के लिए अस्थायी आपदाओं का लेखन है। यदि यह स्मृति में किया जा सकता है, मुझे संदेह है कि प्रसंस्करण समय में काफी कमी आएगी। मैं एक .NET प्रोजेक्ट में ऐसा कर रहा हूं, लेकिन किसी भी भाषा में समाधान का स्वागत है।


सिर्फ रैम डिस्क पर अस्थायी रैस्टर्स को क्यों नहीं लिखा गया है? फिर आपको दृश्यता को खरोंच से कोड नहीं करना होगा, जो अपने जोखिम और लागत के साथ आता है।
whuber

वह बहुत अच्छा लगता है। मुझसे यह कैसे होगा? क्या ऐसा नहीं है जो @ राजदरबार नीचे दिए गए उत्तर में संभव नहीं है?
रॉस फ्यूहरमैन

4
आप अपने सिस्टम पर एक रैम डिस्क स्थापित करते हैं; विवरण ओएस के साथ भिन्न होते हैं। फिर आप उस पर ArcGIS स्क्रैच फोल्डर को इंगित करें। आप SSD का उपयोग करते हुए लगभग कर सकते हैं, खासकर यदि आपके रैस्टर विशाल हैं या यदि आपके पास ज्यादा रैम नहीं है।
whuber

मुझे RAM डिस्क आइडिया पसंद है। एक एसएसडी जोखिम भरा है क्योंकि वे लगातार पढ़ने / लिखने के संचालन के लिए महान नहीं हैं क्योंकि आप इसे जल्दी से पहन सकते हैं।
राडार

2
एक फ़्लैश-आधारित SSD 1 - 5 मिलियन बचेगा, @Radar लिखता है, लेकिन DRAM SSDs बिल्कुल भी "वियर आउट" नहीं करेगा। यात्रा storagesearch.com (बहुत) अधिक जानकारी के लिए।
व्हुबेर

जवाबों:


5

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

इसलिए, इंटरमीडिएट डिस्क I / O के कारण एक अड़चन को तेज करने का एक तरीका यह है कि एक रैम डिस्क स्थापित करें (यदि आवश्यक हो तो अतिरिक्त रैम खरीदकर) और खरोंच फ़ोल्डर को वहां रखें। (यह आमतौर पर एक सॉफ्टवेयर सेटिंग है।)

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

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

किसी भी पूर्ण दृश्यता गणना के लिए आवश्यक गणना की मात्रा को देखते हुए (एक भोली एल्गोरिथ्म में, प्रत्येक सेल को दृश्यता के लिए एक बार दृश्यता के लिए निरीक्षण करना पड़ता है), किसी को कम से कम संदेह होना चाहिए कि कंप्यूटिंग गति, डिस्क I / O, समस्या नहीं हो सकती है यहाँ। अगर ऐसा है, तो रैम डिस्क या एसएसडी समय और धन की बर्बादी होगी। इसके बजाय, अंतर्निहित एल्गोरिथम का विश्लेषण और सुधार करने के प्रयास को निर्देशित किया जाना चाहिए ।

क्या RAM डिस्क प्रदर्शन में मदद करता है की कुछ चर्चा ArcGIS दूसरे धागे में दिखाई दी है ।


+1 महान प्रतिक्रिया। मुझे लगता है कि जीआईएस के लोगों को ग्राफिक्स प्रोसेसिंग यूनिट या जीपीजीपीयू के सामान्य प्रयोजन के उपयोग पर भी नजर रखनी चाहिए । मुझे संदेह है कि शूटर के स्थान से वस्तु की दृश्यता निर्धारित करने के लिए सबसे पहले व्यक्ति शूटर गेम जीपीयू का लाभ उठाते हैं। इस समस्या के OpenCL कार्यान्वयन को देखने के लिए बहुत अच्छा होगा । शायद अगर जीआईएस ने जीपीयू का अधिक उपयोग किया, तो यह उन बच्चों का ध्यान आकर्षित कर सकता है जो बड़े होकर वीडियो गेम खेल रहे हैं।
Kirk Kendkendall

इसके अलावा, मैं इस बात का उल्लेख करता हूं कि GPU छिपी हुई सतह के निर्धारण जैसी चीजों को करने के लिए अनुकूलित है , जो कि ISurfaceOp2.Visibility के अनुरूप है।
Kirk Kendkendall

अच्छे विचार, @Kirk। मैनिफोल्ड NVIDIA GPU का उपयोग करता है (और कई वर्षों से ऐसा किया है)। इस मोर्चे पर स्वतंत्र अनुसंधान भी है; मैं GPU- आधारित मानचित्र बीजगणित कार्यान्वयन को विकसित करने के लिए कुछ अनुदान प्रस्ताव प्रयासों का हिस्सा रहा हूं।
whuber

यह एक उत्कृष्ट उत्तर है। मैंने सुझाया गया प्रोफाइलिंग किया था, और ऐसा प्रतीत हुआ कि डिस्क I / O अड़चन हो सकती है। इसलिए, मैंने एक समाधान लागू किया जिसमें रैम डिस्क का उपयोग किया गया (मैंने IMDisk चुना)। अंत में, इस प्रक्रिया को पूरा करने के लिए समय कम नहीं किया।
रॉस फुरमैन ने

मुझे खेद है कि कोई सुधार नहीं हुआ। दृश्यता एक महंगी गणना है: सिद्धांत रूप में, डीईएम में प्रत्येक कोशिका को प्रत्येक पर्यवेक्षक के लिए निरीक्षण करना पड़ता है और निरीक्षण प्रक्रिया में पर्यवेक्षक और डेम सेल के बीच कोशिकाओं की एक पूरी लाइन देखनी पड़ सकती है: इसका मतलब प्रति गणना के अरबों हो सकते हैं एक मामूली (मेगापिक्सेल) ग्रिड पर भी पर्यवेक्षक। यदि गणना समय समस्या है, तो आपके दो सबसे अच्छे विकल्प होने की संभावना है (1) कार्य को समानांतर करें: कार्यक्षेत्रों में पर्यवेक्षकों को विभाजित करें, विज़ुअलाइज़ेशन की गणना करें, परिणामों को संयोजित करें; और (2) अपना स्वयं का दृश्यता कोड लिखें।
whuber

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.