Métodos para optimizar el procesamiento multcore en ArcGIS

12

Estoy interesado en aprender métodos para utilizar toda la potencia de procesamiento multinúcleo disponible en una computadora de escritorio. Arc afirma que el geoprocesamiento en segundo plano permite al usuario utilizar múltiples núcleos, sin embargo, las tareas esencialmente tienen que esperar en línea para que se complete la tarea anterior.

¿Alguien ha desarrollado métodos de geoprocesamiento paralelos o multiproceso en Arc / Python? ¿Hay cuellos de botella de hardware que impiden el procesamiento multinúcleo en tareas individuales?

Encontré un ejemplo interesante en Stackoverflow que me llamó la atención, aunque no es un ejemplo de geoprocesamiento:

from multiprocessing import Pool
import numpy

numToFactor = 976

def isFactor(x):
    result = None
    div = (numToFactor / x)
    if div*x == numToFactor:
        result = (x,div)
    return result

if __name__ == '__main__':
    pool = Pool(processes=4)
    possibleFactors = range(1,int(numpy.floor(numpy.sqrt(numToFactor)))+1)
    print 'Checking ', possibleFactors
    result = pool.map(isFactor, possibleFactors)
    cleaned = [x for x in result if not x is None]
    print 'Factors are', cleaned
Aaron
fuente
1
En mi experiencia con Arc, casi siempre se reduce a 1) dividir sus datos en {número de núcleos}, procesar y volver a ensamblar o 2) leer todo en la memoria y dejar que x API maneje el subproceso. en cuenta que this is not meant to discourage.
valveLondon
Gracias valvula Londres. Quizás la tecnología más nueva de Ivy Bridge y la GPU Kepler permitirán enfoques de procesamiento más sofisticados.
Aaron
Aquí hay un enlace a un blog útil sobre multiprocesamiento en python de un ingeniero de producto del equipo de análisis y geoprocesamiento de ESRI. blogs.esri.com/esri/arcgis/2011/08/29/multiprocessing
Aaron

Respuestas:

11

En mi experiencia, el mayor problema es gestionar la estabilidad. Si realiza seis semanas de procesamiento en una sola noche, también tendrá seis semanas de errores e errores inexplicables.

Un enfoque alternativo es desarrollar scripts independientes que puedan ejecutarse independientemente y fallar sin causar problemas:

  • Divida los datos en fragmentos que un solo núcleo puede procesar en <20 minutos (tareas).
  • Cree un script de Arcpy independiente que pueda procesar una sola tarea y sea lo más simple posible (trabajador).
  • Desarrollar un mecanismo para ejecutar tareas. Existen muchas soluciones python preexistentes. Alternativamente, puede hacer el suyo con una simple cola.
  • Escriba un código para verificar que las tareas se hayan completado. Esto podría ser tan simple como verificar que se haya escrito un archivo de salida.
  • Fusionar datos nuevamente.
Matthew Snape
fuente
1
He descubierto que este enfoque, que puede incluir el uso del módulo de multiprocesamiento, es bueno: algunas extensiones, como el analista espacial, no funcionan muy bien si tiene varias copias de la misma función ejecutándose simultáneamente, así que algo así como lo que describa que permita una forma de colas controlada por el usuario (es decir, evite programar esas tareas al mismo tiempo o evite usar la misma geodatabase a la vez por razones de bloqueo de archivos) será lo mejor.
nicksan