12 votos

Métodos para la optimización de multcore de procesamiento en ArcGIS

Estoy interesado en aprender los métodos para utilizar la extensión total de la potencia de procesamiento multinúcleo disponibles en un equipo de escritorio. Arco establece que el fondo de geoprocesamiento permite al usuario utilizar varios núcleos, sin embargo, las tareas esencialmente tiene que esperar en línea para la tarea anterior para ser completado.

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

He encontrado un interesante ejemplo en Stackoverflow que llamó mi interés, aunque no es una de geoprocesamiento ejemplo:

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

11voto

auramo Puntos 161

Aquí está un ejemplo de un multinúcleo arcpy secuencia de comandos. El proceso es muy intensivo de la CPU, de modo que se escala muy bien: "Puerto de la Producción de la Construcción de las Sombras" de la Avenida código de ArcGIS 10

Algo más de info general en esta respuesta: Puede concurrentes de los procesos se pueden ejecutar en un solo modelo?

11voto

Nate Puntos 220

En mi experiencia, el mayor problema es la gestión de la estabilidad. Si usted hace seis semanas de tratamiento en una sola noche también tendrá seis semanas de inexplicables errores y bugs.

Un enfoque alternativo es desarrollar independiente de secuencias de comandos que se pueden ejecutar de forma independiente y fallar sin causar problemas:

  • Dividir los datos en partes más pequeñas que un solo núcleo puede procesar en menos de 20 minutos (tareas).
  • Construir una independiente de Arcpy secuencia de comandos que puede procesar una sola tarea, y es tan simple como sea posible (el trabajador).
  • Desarrollar un mecanismo para ejecutar las tareas. Un montón de pre-existente python existen soluciones. Alternativamente, usted puede hacer su propio con una simple cola.
  • Escribir el código para verificar que las tareas se han completado. Esto podría ser tan simple como comprobar que un archivo de salida que ha sido escrito.
  • Combinar los datos de nuevo juntos.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X