Методы оптимизации многоядерной обработки в ArcGIS

12

Я заинтересован в изучении методов, позволяющих использовать все возможности многоядерной обработки, доступные на настольном компьютере. Arc заявляет, что фоновая геообработка позволяет пользователю использовать несколько ядер, однако задачи по сути должны ждать в очереди, чтобы предыдущая задача была завершена.

Кто-нибудь разрабатывал параллельные или многопоточные методы геообработки в Arc / Python? Существуют ли аппаратные узкие места, препятствующие многоядерной обработке отдельных задач?

Я нашел интересный пример в Stackoverflow, который заинтересовал меня, хотя это не пример геообработки:

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
В моем опыте с Arc это почти всегда сводится к 1) разделению ваших данных на {количество основных} кусков, обработке и повторной сборке или 2) чтению всего в память и предоставлению x API обработки потоков. обратите внимание, что this is not meant to discourage.
valveLondon
Спасибо вентиль Лондон. Возможно, новая технология Ivy Bridge и графический процессор Kepler позволят использовать более сложные подходы к обработке.
Аарон
Вот ссылка на полезный блог о многопроцессорной обработке Python, разработанный инженером по продукту из команды ESRIs Analysis and Geoprocessing. blogs.esri.com/esri/arcgis/2011/08/29/multiprocessing
Аарон

Ответы:

11

Вот пример многоядерного скрипта arcpy. Процесс очень интенсивно использует процессор, поэтому он хорошо масштабируется: перенос кода Avenue для создания теней зданий в ArcPy / Python для ArcGIS Desktop?

Немного более общей информации в этом ответе: могут ли параллельные процессы выполняться в одной модели?

blah238
источник
11

По моему опыту, самая большая проблема - это управление стабильностью. Если вы выполняете шесть недель обработки за одну ночь, у вас также будет шесть недель необъяснимых ошибок и ошибок.

Альтернативный подход заключается в разработке автономных сценариев, которые могут работать независимо и не работать, не вызывая проблем:

  • Разделите данные на куски, которые одно ядро ​​может обработать за <20 минут (задачи).
  • Создайте автономный скрипт Arcpy, который может обрабатывать одну задачу и максимально прост (рабочий).
  • Разработать механизм запуска задач. Существует множество уже существующих решений Python. В качестве альтернативы вы можете сделать свой собственный с простой очередью.
  • Напишите некоторый код, чтобы убедиться, что задачи были выполнены. Это может быть так же просто, как проверить, что выходной файл был записан.
  • Объединить данные обратно вместе.
Мэтью Снейп
источник
1
Я обнаружил, что этот подход, который может включать использование многопроцессорного модуля, является хорошим - некоторые расширения, такие как пространственный аналитик, работают не очень хорошо, если у вас одновременно работает несколько копий одной и той же функции, так что-то вроде то, что вы описываете, что допускает управляемую пользователем форму организации очередей (то есть избегает планирования этих задач в одно и то же время или избегает одновременного использования одной и той же базы геоданных по причинам блокировки файлов), будет наилучшим.
Nicksan