Niestandardowa implementacja funkcji ArcGIS

9

Chciałbym dowiedzieć się, co trzeba zrobić, aby stworzyć niestandardową implementację funkcji ArcGIS. W szczególności chciałbym zaimplementować GeoAnalyst.ISurfaceOp2.Visibility (), aby przyspieszyć jego działanie. Obecnie trwa około 3 sekund na każde wywołanie Visibility (). Z mojego ograniczonego zrozumienia wąskim gardłem jest zapisywanie tymczasowych rastrów w systemie plików. Jeśli można to zrobić w pamięci, podejrzewam, że czas przetwarzania znacznie by się skrócił. Robię to w projekcie .NET, ale rozwiązania w każdym języku są mile widziane.

Ross Fuhrman
źródło
Dlaczego nie zapisać tymczasowych rastrów na dysku RAM? Wtedy nie będziesz musiał kodować opcji widoczności od zera, co wiąże się z jej własnym ryzykiem i kosztami.
whuber
To brzmi świetnie. Jak miałbym to zrobić? Czy nie tak twierdzi @Radar w odpowiedzi poniżej?
Ross Fuhrman
4
Instalujesz dysk RAM w swoim systemie; szczegóły różnią się w zależności od systemu operacyjnego. Następnie wskaż na niego folder scratch ArcGIS. Możesz zrobić prawie tak samo dobrze, używając SSD, szczególnie jeśli twoje rastry są ogromne lub jeśli nie masz dużo pamięci RAM.
whuber
Podoba mi się pomysł na pamięć RAM. Dysk SSD jest ryzykowny, ponieważ nie nadaje się do ciągłych operacji odczytu / zapisu, ponieważ można go szybko zużyć.
Radar
2
Dysk SSD z pamięcią flash przetrwa 1–5 milionów zapisów, @Radar, ale dyski SSD DRAM w ogóle się nie „zużyją”. Odwiedź storagesearch.com, aby uzyskać więcej informacji.
whuber

Odpowiedzi:

5

Ta odpowiedź upamiętnia i rozwija część dyskusji w komentarzach. Dysku RAM emuluje zewnętrznego dysku z wykorzystaniem niektórych RAM w systemie komputerowym. Może odczytywać i zapisywać z prędkością porównywalną do buforowania w pamięci, pomniejszoną o narzut związany z protokołami translacji do konwersji poleceń zorientowanych na dysk na polecenia zorientowane na pamięć. Dysk RAM jest tworzony przez uruchomienie specjalnego oprogramowania na poziomie systemu operacyjnego, „sterownika urządzenia”. Dyski typu open source i bezpłatne dyski RAM są dostępne dla wielu systemów operacyjnych, w tym Windows.

Dlatego jednym ze sposobów przyspieszenia wąskiego gardła wynikającego z operacji we / wy dysku pośredniego jest skonfigurowanie dysku RAM (w razie potrzeby zakup dodatkowej pamięci RAM) i umieszczenie w nim folderu scratch. (Zazwyczaj jest to ustawienie oprogramowania).

Inną opcją jest zainstalowanie wysokiej klasy urządzenia półprzewodnikowego DRAM (SSD), które zasadniczo jest blokiem pamięci RAM w osobnym opakowaniu z interfejsem elektronicznym, który działa jak napęd dyskowy. Instaluje się w systemie komputerowym zamiast napędu dyskowego i zachowuje się dokładnie tak, jak inny napęd dyskowy bez dodatkowego oprogramowania, ale odczytuje i zapisuje prawie tak szybko, jak dostęp do pamięci. Są one stosunkowo drogie, ale prawdopodobnie tylko niewielki jest potrzebny nawet do bardzo dużego pośredniego przechowywania rastrowego.

Przed podjęciem któregokolwiek z tych kroków ważne jest profilowanieproces ustalania, gdzie naprawdę jest wąskie gardło. (W ostatnich latach system Windows jest dostarczany z coraz bardziej zaawansowanymi aplikacjami do profilowania i monitorowania, dostępnymi w Win 7 jako para Menedżer zadań / Monitor zasobów, i oczywiście wiele podobnych aplikacji jest dostępnych również dla innych systemów operacyjnych.) Wiele systemów jest konfigurowanych automatycznie lub można skonfigurować, aby buforować odczyt dysku i zapisywanie w pamięci RAM przez krótki czas. Buforowanie działa prawie tak samo jak dysk RAM, ale prawdopodobnie jest nawet szybsze: oprogramowanie myśli, że zapisuje pliki pośrednie na dysk, ale system operacyjny najpierw zapisuje je tymczasowo do pamięci RAM, nie uzyskując dostępu do dysku, w nadziei, że wkrótce te same dane zostaną odczytane i usunięte, w takim przypadku fizyczny zapis nigdy nie będzie konieczny.

Biorąc pod uwagę ilość obliczeń potrzebnych do obliczenia pełnej widoczności (w naiwnym algorytmie każda komórka musi zostać sprawdzona pod kątem widoczności raz dla każdego punktu widzenia), należy przynajmniej podejrzewać, że problem może stanowić prędkość obliczeniowa, a nie dyskowe operacje we / wy. tutaj. W takim przypadku dyski RAM lub dyski SSD będą stratą czasu i pieniędzy. Zamiast tego należy skoncentrować wysiłki na analizie i ulepszeniu podstawowego algorytmu .

W innym wątku pojawiła się dyskusja na temat tego, czy wydajność dysku RAM pomaga ArcGIS .

Whuber
źródło
+1 Świetna odpowiedź. Myślę, że ludzie z GIS powinni również mieć oko na ogólne zastosowanie procesora graficznego lub GPGPU . Podejrzewam, że większość gier FPS wykorzystuje GPU, aby określić widoczność obiektu z lokalizacji strzelca. Byłoby wspaniale zobaczyć wdrożenie tego problemu w OpenCL . Może gdyby GIS częściej korzystał z GPU, może zwrócić uwagę dzieci, które dorastały, grając w gry wideo.
Kirk Kuykendall
Chciałem też wspomnieć, że procesor graficzny jest zoptymalizowany do wykonywania takich czynności, jak określanie ukrytej powierzchni , co jest podobne do działania ISurfaceOp2.Visibility.
Kirk Kuykendall
Dobre pomysły, @Kirk. Manifold korzysta z procesorów graficznych NVIDIA (i robił to od kilku lat). Istnieją również niezależne badania w tym zakresie; Brałem udział w pracach nad wnioskami o dotację w celu opracowania implementacji algebry map opartej na GPU.
whuber
To doskonała odpowiedź. Zrobiłem sugerowane profilowanie i okazało się, że może istnieć wąskie gardło dysku I / O. Tak więc wdrożyłem rozwiązanie, które korzystało z dysku RAM (wybrałem IMDisk). Ostatecznie nie skróciło to czasu na zakończenie procesu.
Ross Fuhrman
Przykro mi, że nie było poprawy. Widoczność jest kosztownym obliczeniem: w zasadzie każda komórka w DEM musi zostać sprawdzona dla każdego obserwatora, a proces kontroli może wymagać spojrzenia na całą linię komórek między obserwatorem a komórką DEM: może to oznaczać miliardy obliczeń na obserwator nawet na skromnej (megapikselowej) siatce. Jeśli problemem jest czas obliczeń, prawdopodobnie dwie najlepsze opcje (1) zrównoleglą pracę: podziel obserwatorów na stacje robocze, oblicz widoczność, połącz wyniki; oraz (2) napisać własny kod widoczności.
whuber