Metodi per l'ottimizzazione dell'elaborazione multcore in ArcGIS


12

Sono interessato ai metodi di apprendimento per utilizzare tutta la potenza di elaborazione multicore disponibile su un computer desktop. Arc afferma che il geoprocessing in background consente all'utente di utilizzare più core, tuttavia le attività devono essenzialmente attendere in linea per il completamento dell'attività precedente.

Qualcuno ha sviluppato metodi di geoprocessing paralleli o multithread in Arc / Python? Ci sono colli di bottiglia hardware che impediscono l'elaborazione multicore su singole attività?

Ho trovato un esempio interessante in StackOverflow che ha attirato il mio interesse, sebbene non sia un esempio di geoprocessing:

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

1
Nella mia esperienza Arc, si riduce quasi sempre a 1) suddividere i dati in {numero di core} blocchi, elaborare e riassemblare o 2) leggere tutto in memoria e lasciare che x API gestisca il threading. notare che this is not meant to discourage.
valvolaLondra,

Grazie valvola, Londra. Forse la più recente tecnologia Ivy Bridge e la GPU Kepler consentiranno approcci di elaborazione più sofisticati.
Aaron

Ecco un link a un utile blog sul multiprocessing di Python da un ingegnere di prodotto nel team di analisi e geoprocessing di ESRI. blogs.esri.com/esri/arcgis/2011/08/29/multiprocessing
Aaron

Risposte:



11

Nella mia esperienza il problema più grande è la gestione della stabilità. Se esegui sei settimane di elaborazione in una sola notte, avrai anche sei settimane di errori e bug inspiegabili.

Un approccio alternativo è lo sviluppo di script autonomi che possono essere eseguiti in modo indipendente e fallire senza causare problemi:

  • Dividi i dati in blocchi che un singolo core può elaborare in <20 minuti (attività).
  • Costruisci uno script Arcpy autonomo in grado di elaborare una singola attività ed è il più semplice possibile (lavoratore).
  • Sviluppa un meccanismo per eseguire le attività. Esistono molte soluzioni preesistenti di Python. In alternativa puoi crearne uno tuo con una semplice coda.
  • Scrivi del codice per verificare che le attività siano state completate. Questo potrebbe essere semplice come verificare che sia stato scritto un file di output.
  • Unire nuovamente i dati.

1
Ho scoperto che questo approccio, che può includere l'uso del modulo multiprocessing, è valido - alcune estensioni, come l'analista spaziale, non funzionano molto bene se hai più copie della stessa funzione in esecuzione contemporaneamente, quindi qualcosa di simile ciò che descrivi che consente una forma di accodamento controllata dall'utente (ovvero, evita di pianificare tali attività contemporaneamente o evita di utilizzare lo stesso geodatabase contemporaneamente per motivi di blocco dei file) sarà la cosa migliore.
nicksan,
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.