Implementazione personalizzata della funzione ArcGIS


9

Vorrei scoprire cosa serve per creare un'implementazione personalizzata di una funzione ArcGIS. In particolare, vorrei implementare GeoAnalyst.ISurfaceOp2.Visibility () per farlo funzionare più velocemente. In questo momento, ci vogliono ~ 3 secondi per chiamata a Visibilità (). Dalla mia comprensione limitata, il collo di bottiglia è la scrittura di raster temporanei nel file system. Se ciò fosse possibile in memoria, sospetto che il tempo di elaborazione diminuirà in modo significativo. Lo sto facendo in un progetto .NET, ma le soluzioni in qualsiasi lingua sono benvenute.


Perché non solo avere i raster temporanei scritti su un disco RAM? Quindi non dovrai codificare la visibilità da zero, che comporta rischi e costi.
whuber

Suona bene. Come potrei farlo? Non è ciò che afferma @Radar non è possibile nella risposta qui sotto?
Ross Fuhrman,

4
Installi un disco RAM sul tuo sistema; i dettagli variano con il sistema operativo. Quindi si punta la cartella scratch ArcGIS su di essa. Puoi anche usare un SSD, soprattutto se i tuoi raster sono enormi o se non hai molta RAM.
whuber

Mi piace l'idea del disco RAM. Un SSD è rischioso poiché non sono l'ideale per le operazioni di lettura / scrittura costanti in quanto potresti usurarlo rapidamente.
Radar,

2
Un SSD basato su flash sopravviverà da 1 a 5 milioni di scritture, @Radar, ma gli SSD DRAM non si esauriranno affatto. Visita storagesearch.com per (molti) maggiori informazioni.
whuber

Risposte:


5

Questa risposta memorizza e si espande su alcune discussioni nei commenti. Un disco RAM emula un'unità disco esterna utilizzando parte della RAM in un sistema di elaborazione. Può leggere e scrivere a velocità paragonabili alla cache in memoria, meno un po 'di sovraccarico per i protocolli di traduzione per convertire i comandi orientati al disco in comandi orientati alla memoria. Un disco RAM viene creato eseguendo un software speciale a livello di sistema operativo, un "driver di dispositivo". Sono disponibili dischi RAM liberi e open source per molti sistemi operativi, incluso Windows.

Pertanto, un modo per accelerare un collo di bottiglia a causa dell'I / O del disco intermedio consiste nell'impostare un disco RAM (acquistando la RAM aggiuntiva se necessario) e posizionare lì la cartella scratch. (Questa è solitamente un'impostazione software.)

Un'altra opzione è quella di installare un dispositivo a stato solido DRAM (SSD) di fascia alta , che essenzialmente è un blocco di RAM in un pacchetto separato con un'interfaccia elettronica per agire come un'unità disco. Si installa in un sistema informatico al posto di un'unità disco e si comporterà esattamente come un'altra unità disco senza software aggiuntivo, ma leggerà e scriverà quasi alla stessa velocità degli accessi alla memoria. Questi sono relativamente costosi, ma probabilmente è necessario solo uno piccolo anche per l'archiviazione raster intermedia molto grande.

Prima di eseguire uno qualsiasi di questi passaggi, è importante creare un profiloil processo per accertare dove si trova realmente il collo di bottiglia. (Windows è stato fornito con app di profilazione e monitoraggio sempre più potenti negli ultimi anni, disponibile in Win 7 come coppia Task Manager / Monitor risorse e, naturalmente, molte app simili sono disponibili anche per altri sistemi operativi.) Molti sistemi sono configurati automaticamente, o può essere configurato per memorizzare nella cache le letture e le scritture del disco nella RAM per brevi periodi. La memorizzazione nella cache funziona quasi come un disco RAM, ma è probabilmente ancora più veloce: il software pensa che stia scrivendo file intermedi su disco, ma il sistema operativo li scrive temporaneamente nella RAM prima, non accedendo al disco, nella speranza che presto gli stessi dati verrà riletto ed eliminato, nel qual caso una scrittura fisica non sarà mai necessaria.

Data la quantità di calcolo necessaria per qualsiasi calcolo di visibilità completa (in un algoritmo ingenuo, ogni cella deve essere ispezionata per la visibilità una volta per ogni punto di vista), si dovrebbe almeno sospettare che la velocità di elaborazione, non l'I / O del disco, possa essere il problema Qui. In tal caso, i dischi RAM o SSD saranno una perdita di tempo e denaro. Invece, lo sforzo dovrebbe essere diretto all'analisi e al miglioramento dell'algoritmo sottostante .

Qualche discussione sul fatto che le prestazioni del disco RAM aiutino ArcGIS è apparso in un altro thread .


+1 Ottima risposta. Penso che le persone GIS dovrebbero anche tenere d'occhio l'uso per uso generale dell'unità di elaborazione grafica o GPGPU . Sospetto che la maggior parte dei giochi sparatutto in prima persona faccia leva sulla GPU per determinare la visibilità dell'oggetto dalla posizione del tiratore. Sarebbe bello vedere un'implementazione OpenCL di questo problema. Forse se GIS usasse di più la GPU, potrebbe attirare l'attenzione dei bambini che sono cresciuti giocando ai videogiochi.
Kirk Kuykendall,

Volevo anche menzionare che la GPU è ottimizzata per fare cose come la determinazione della superficie nascosta , che è simile a quella di ISurfaceOp2.Visibility.
Kirk Kuykendall,

Buone idee, @Kirk. Manifold utilizza le GPU NVIDIA (e lo fa da diversi anni). C'è anche una ricerca indipendente su questo fronte; Ho preso parte ad alcune proposte di sovvenzione per sviluppare implementazioni di algebra di mappe basate su GPU.
whuber

Questa è una risposta eccellente Ho creato il profilo suggerito e sembrava che potesse esserci un collo di bottiglia di I / O sul disco. Quindi, ho implementato una soluzione che utilizzava un disco RAM (ho scelto IMDisk). Alla fine, ciò non ha ridotto i tempi di completamento del processo.
Ross Fuhrman,

Mi dispiace sapere che non ci sono stati miglioramenti. La visibilità è un calcolo costoso: in linea di principio, ogni cella nel DEM deve essere ispezionata per ciascun osservatore e il processo di ispezione potrebbe dover esaminare un'intera linea di celle tra l'osservatore e la cella DEM: ciò può significare miliardi di calcoli per osservatore anche su una griglia modesta (megapixel). Se il tempo di calcolo è il problema, è probabile che le tue due migliori opzioni (1) parallelizzino il lavoro: dividere gli osservatori su postazioni di lavoro, calcolare la visibilità, combinare i risultati; e (2) scrivere il proprio codice di visibilità.
whuber

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.