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) 데이터를 {number of core} 청크로 나누고, 처리하고 재 조립하거나, 2) 모든 것을 메모리로 읽고 x API가 스레딩을 처리하게합니다. 참고하십시오 this is not meant to discourage.
밸브 런던

감사 밸브 런던. 아마도 최신 Ivy Bridge 기술과 Kepler GPU는보다 정교한 처리 방식을 허용 할 것입니다.
Aaron

다음은 ESRI 분석 및 지오 프로세싱 팀 제품 엔지니어의 파이썬 멀티 프로세싱에 대한 유용한 블로그 링크입니다. blogs.esri.com/esri/arcgis/2011/08/29/ 멀티 프로세싱
Aaron

답변:



11

내 경험상 가장 큰 문제는 안정성 관리입니다. 하룻밤에 6 주 동안 처리하면 6 주 동안 설명 할 수없는 오류와 버그가 발생합니다.

다른 방법은 독립적으로 실행할 수 있고 문제없이 실패 할 수있는 독립형 스크립트를 개발하는 것입니다.

  • 단일 코어가 <20 분 내에 처리 할 수있는 청크로 데이터를 분할합니다 (작업).
  • 단일 작업을 처리 할 수 ​​있고 가능한 한 간단하게 (작업자) 독립형 Arcpy 스크립트를 작성하십시오.
  • 작업을 실행하는 메커니즘을 개발하십시오. 기존의 파이썬 솔루션이 많이 있습니다. 또는 간단한 대기열을 사용하여 직접 만들 수도 있습니다.
  • 작업이 완료되었는지 확인하는 코드를 작성하십시오. 출력 파일이 작성되었는지 확인하는 것만 큼 간단 할 수 있습니다.
  • 데이터를 다시 병합합니다.

1
다중 처리 모듈 사용을 포함 할 수있는이 접근법은 좋은 방법이라는 것을 알았습니다. 공간 분석과 같은 일부 확장 기능은 동일한 기능의 여러 사본이 동시에 실행되는 경우 잘 작동하지 않습니다. 사용자가 제어하는 ​​대기열 형식을 허용하는 것 (즉, 해당 작업을 동시에 예약하지 못하거나 파일 잠금 이유로 인해 동일한 지오 데이터베이스를 한 번에 사용하지 않는 것)이 가장 좋습니다.
nicksan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.