Methoden zur Optimierung der Mehrkernverarbeitung in ArcGIS

12

Ich interessiere mich für Lernmethoden, um das volle Ausmaß der auf einem Desktop-Computer verfügbaren Multicore-Verarbeitungsleistung zu nutzen. Arc gibt an, dass die Hintergrund-Geoverarbeitung es dem Benutzer ermöglicht, mehrere Kerne zu verwenden. Tasks müssen jedoch im Wesentlichen in der Warteschlange warten, bis die vorherige Task abgeschlossen ist.

Hat jemand parallele oder Multithread-Geoverarbeitungsverfahren in Arc / Python entwickelt? Gibt es Hardware-Engpässe, die die Multicore-Verarbeitung bei einzelnen Aufgaben verhindern?

In Stackoverflow habe ich ein interessantes Beispiel gefunden, das mein Interesse geweckt hat, obwohl es kein Geoverarbeitungsbeispiel ist:

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
quelle
1
In meiner Arc-Erfahrung läuft es fast immer darauf hinaus, 1) Ihre Daten in {Anzahl der Kern} Blöcke aufzuteilen, zu verarbeiten und wieder zusammenzusetzen oder 2) alles in den Speicher zu lesen und x API das Threading handhaben zu lassen. beachte das this is not meant to discourage.
ValveLondon
Vielen Dank, valveLondon. Möglicherweise ermöglichen die neuere Ivy Bridge-Technologie und die Kepler-GPU komplexere Verarbeitungsansätze.
Aaron
Hier ist ein Link zu einem nützlichen Blog über Python Multiprocessing von einem Produktingenieur des ESRIs Analysis and Geoprocessing-Teams. blogs.esri.com/esri/arcgis/2011/08/29/multiprocessing
Aaron

Antworten:

11

Meiner Erfahrung nach ist das größte Problem das Stabilitätsmanagement. Wenn Sie sechs Wochen lang in einer einzigen Nacht arbeiten, treten auch sechs Wochen lang unerklärliche Fehler und Bugs auf.

Ein alternativer Ansatz besteht darin, eigenständige Skripts zu entwickeln, die unabhängig ausgeführt werden können und ohne Probleme fehlschlagen:

  • Teilen Sie die Daten in Blöcke auf, die ein einzelner Kern in weniger als 20 Minuten verarbeiten kann (Aufgaben).
  • Erstellen Sie ein eigenständiges Arcpy-Skript, das eine einzelne Aufgabe verarbeiten kann und so einfach wie möglich ist (Worker).
  • Entwickeln Sie einen Mechanismus zum Ausführen von Aufgaben. Es gibt viele bereits vorhandene Python-Lösungen. Alternativ können Sie Ihre eigene mit einer einfachen Warteschlange erstellen.
  • Schreiben Sie Code, um zu überprüfen, ob die Aufgaben abgeschlossen wurden. Dies kann so einfach sein, wie zu überprüfen, ob eine Ausgabedatei geschrieben wurde.
  • Daten wieder zusammenführen.
Matthew Snape
quelle
1
Ich habe festgestellt, dass dieser Ansatz, der die Verwendung des Multiprocessing-Moduls umfassen kann, gut ist. Einige Erweiterungen, wie z. B. der Spatial Analyst, funktionieren nicht sehr gut, wenn mehrere Kopien derselben Funktion gleichzeitig ausgeführt werden Das, was Sie beschreiben, das eine benutzergesteuerte Form der Warteschlange ermöglicht (dh, es wird vermieden, diese Aufgaben gleichzeitig zu planen oder aus Gründen der Dateisperrung dieselbe Geodatabase auf einmal zu verwenden), ist am besten.
Nicksan