Implementación personalizada de la función ArcGIS

9

Me gustaría saber qué se necesita para crear una implementación personalizada de una función ArcGIS. En particular, me gustaría implementar GeoAnalyst.ISurfaceOp2.Visibility () para que se ejecute más rápido. En este momento, está tomando ~ 3 segundos por llamada a Visibility (). Desde mi entendimiento limitado, el cuello de botella es la escritura de rásteres temporales en el sistema de archivos. Si esto se pudiera hacer en la memoria, sospecho que el tiempo de procesamiento disminuirá significativamente. Estoy haciendo esto en un proyecto .NET, pero las soluciones en cualquier idioma son bienvenidas.

Ross Fuhrman
fuente
¿Por qué no simplemente tener los rásteres temporales escritos en un disco RAM? Entonces no tendrá que codificar la visibilidad desde cero, lo que conlleva sus propios riesgos y costos.
whuber
Eso suena genial. ¿Cómo voy a hacer eso? ¿No es eso lo que dice @Radar no es posible en la respuesta a continuación?
Ross Fuhrman el
44
Instala un disco RAM en su sistema; Los detalles varían con el sistema operativo. Luego apuntas la carpeta de scratch ArcGIS. Podría hacerlo casi tan bien usando un SSD, especialmente si sus rásteres son enormes o si no tiene mucha RAM.
whuber
Me gusta la idea del disco RAM. Un SSD es arriesgado ya que no son excelentes para operaciones de lectura / escritura constantes, ya que podría desgastarse rápidamente.
Radar
2
Un SSD basado en flash sobrevivirá de 1 a 5 millones de escrituras, @Radar, pero los SSD DRAM no se "desgastarán" en absoluto. Visite storagesearch.com para (lotes) más información.
whuber

Respuestas:

5

Esta respuesta conmemora y amplía parte de la discusión en los comentarios. Un disco RAM emula una unidad de disco externa utilizando parte de la RAM en un sistema informático. Puede leer y escribir a velocidades comparables al almacenamiento en caché en memoria, menos un poco de sobrecarga para que los protocolos de traducción conviertan comandos orientados a disco en comandos orientados a memoria. Se crea un disco RAM ejecutando un software especial a nivel de sistema operativo, un "controlador de dispositivo". Los discos de código abierto y RAM gratuitos están disponibles para muchos sistemas operativos, incluido Windows.

Por lo tanto, una forma de acelerar un cuello de botella debido a la E / S de disco intermedia es configurar un disco RAM (comprando la RAM adicional si es necesario) y colocar la carpeta reutilizable allí. (Esto suele ser una configuración de software).

Otra opción es instalar un dispositivo de estado sólido (SSD) DRAM de alta gama , que esencialmente es un bloque de RAM en un paquete separado con una interfaz electrónica para actuar como una unidad de disco. Se instala en un sistema informático en lugar de una unidad de disco y se comportará exactamente como otra unidad de disco sin ningún software adicional, pero leerá y escribirá casi tan rápido como los accesos a la memoria. Estos son relativamente caros, pero es probable que solo se necesite uno pequeño incluso para el almacenamiento de trama intermedio muy grande.

Antes de tomar cualquiera de estos pasos, es importante perfilarEl proceso para determinar dónde está realmente el cuello de botella. (Windows se ha entregado con aplicaciones de monitoreo y creación de perfiles cada vez más potentes en los últimos años, disponibles en Win 7 como el par de Administrador de tareas / Monitor de recursos, y por supuesto, muchas aplicaciones similares también están disponibles para otros sistemas operativos). Muchos sistemas se configuran automáticamente, o se puede configurar para almacenar en caché las lecturas y escrituras de disco en la RAM por períodos cortos. El almacenamiento en caché funciona casi igual que un disco RAM, pero probablemente sea aún más rápido: el software cree que está escribiendo archivos intermedios en el disco, pero el sistema operativo los escribe temporalmente en la RAM primero, no accediendo al disco, con la esperanza de que pronto los mismos datos será leído y eliminado, en cuyo caso nunca será necesaria una escritura física.

Dada la cantidad de cómputo necesaria para cualquier cálculo de visibilidad completa (en un algoritmo ingenuo, cada celda debe ser inspeccionada para ver la visibilidad una vez para cada punto de vista), al menos se debe sospechar que la velocidad de computación, no la E / S del disco, puede ser el problema aquí. Si ese es el caso, los discos RAM o SSD serán una pérdida de tiempo y dinero. En cambio, el esfuerzo debe dirigirse a analizar y mejorar el algoritmo subyacente .

Alguna discusión sobre si el rendimiento del disco RAM ayuda a ArcGIS ha aparecido en otro hilo .

whuber
fuente
+1 Gran respuesta. Creo que la gente de SIG también debería vigilar el uso general de la unidad de procesamiento de gráficos, o GPGPU . Sospecho que la mayoría de los juegos de disparos en primera persona aprovechan la GPU para determinar la visibilidad del objeto desde la ubicación del tirador. Sería genial ver una implementación de OpenCL de este problema. Quizás si GIS usara más la GPU, entonces podría llamar la atención de los niños que crecieron jugando videojuegos.
Kirk Kuykendall
También quise mencionar que la GPU está optimizada para hacer cosas como la determinación de superficies ocultas , que es similar a lo que hace ISurfaceOp2.Visibility.
Kirk Kuykendall
Buenas ideas, @Kirk. Manifold utiliza las GPU NVIDIA (y lo ha hecho durante varios años). También hay investigaciones independientes en este frente; He sido parte de algunos esfuerzos de propuesta de subvención para desarrollar implementaciones de álgebra de mapas basadas en GPU.
whuber
Esta es una excelente respuesta. Hice el perfil sugerido, y parecía que podría haber un cuello de botella de E / S de disco. Entonces, implementé una solución que usaba un disco RAM (elegí IMDisk). Al final, esto no redujo el tiempo para completar el proceso.
Ross Fuhrman
Lamento escuchar que no hubo mejoras. La visibilidad es un cálculo costoso: en principio, cada celda en el DEM debe ser inspeccionada para cada observador y el proceso de inspección puede tener que mirar una línea completa de celdas entre el observador y la celda DEM: eso puede significar miles de millones de cálculos por observador incluso en una cuadrícula modesta (megapíxeles). Si el problema es el tiempo de cálculo, es probable que sus dos mejores opciones (1) hagan paralelo el trabajo: divida a los observadores en las estaciones de trabajo, calcule las visibilidades, combine los resultados; y (2) escriba su propio código de visibilidad.
whuber