Métodos para otimizar o processamento multcore no ArcGIS

12

Estou interessado em aprender métodos para utilizar toda a extensão do poder de processamento multicore disponível em um computador desktop. Arc afirma que o geoprocessamento em segundo plano permite que o usuário utilize vários núcleos; no entanto, as tarefas precisam aguardar na fila para que a tarefa anterior seja concluída.

Alguém desenvolveu métodos de geoprocessamento paralelo ou multithread no Arc / Python? Existem gargalos de hardware que impedem o processamento multicore em tarefas individuais?

Encontrei um exemplo interessante no Stackoverflow que chamou minha atenção, embora não seja um exemplo de geoprocessamento:

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
fonte
1
Na minha experiência com o Arc, quase sempre se resume a 1) dividir seus dados em {número de blocos principais}, processar e remontar ou 2) ler tudo na memória e deixar a API x lidar com o encadeamento. note isso this is not meant to discourage.
valveLondon
Graças valveLondon. Talvez a tecnologia Ivy Bridge mais recente e a GPU Kepler permitam abordagens de processamento mais sofisticadas.
Aaron
Aqui está um link para um blog útil sobre multiprocessamento python de um engenheiro de produto da equipe de análise e geoprocessamento de ESRIs. blogs.esri.com/esri/arcgis/2011/08/29/multiprocessing
Aaron

Respostas:

11

Na minha experiência, o maior problema é gerenciar a estabilidade. Se você executar seis semanas de processamento em uma única noite, também terá seis semanas de erros e bugs inexplicáveis.

Uma abordagem alternativa é desenvolver scripts independentes que possam ser executados independentemente e falhar sem causar problemas:

  • Divida os dados em partes que um único núcleo pode processar em <20 minutos (tarefas).
  • Crie um script autônomo do Arcpy que possa processar uma única tarefa e seja o mais simples possível (trabalhador).
  • Desenvolva um mecanismo para executar tarefas. Existem muitas soluções python pré-existentes. Como alternativa, você pode fazer o seu próprio com uma fila simples.
  • Escreva um código para verificar se as tarefas foram concluídas. Isso pode ser tão simples quanto verificar se um arquivo de saída foi gravado.
  • Mesclar dados novamente.
Matthew Snape
fonte
1
Descobri que essa abordagem, que pode incluir o uso do módulo de multiprocessamento, é boa - algumas extensões, como analista espacial, não funcionam muito bem se você tiver várias cópias da mesma função em execução simultaneamente, então algo como o que você descreve que permite uma forma de enfileiramento controlada pelo usuário (ou seja, evita agendar essas tarefas ao mesmo tempo ou evita usar o mesmo geodatabase de uma só vez por razões de bloqueio de arquivo) será melhor.
Nicksan