Metode untuk mengoptimalkan pemrosesan multcore dalam ArcGIS

12

Saya tertarik pada metode pembelajaran untuk memanfaatkan sepenuhnya kekuatan pemrosesan multicore yang tersedia di komputer desktop. Arc menyatakan bahwa geoprocessing latar belakang memungkinkan pengguna untuk menggunakan banyak core, namun, tugas-tugas pada dasarnya harus menunggu dalam antrian untuk menyelesaikan tugas sebelumnya.

Adakah yang mengembangkan metode geoproses paralel atau multithreaded di Arc / Python? Apakah ada hambatan perangkat keras yang mencegah pemrosesan multicore pada tugas individu?

Saya menemukan contoh menarik di Stackoverflow yang menarik minat saya, meskipun itu bukan contoh geoproses:

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
Harun
sumber
1
Dalam pengalaman Arc saya, hampir selalu bermuara pada 1) memecah data Anda menjadi {jumlah inti} potongan, memproses dan menyusun kembali atau 2) membaca semuanya ke dalam memori dan membiarkan x API menangani threading. perhatikan itu this is not meant to discourage.
valveLondon
Terima kasih valveLondon. Mungkin teknologi Ivy Bridge yang lebih baru dan GPU Kepler akan memungkinkan pendekatan pemrosesan yang lebih canggih.
Aaron
Berikut ini tautan ke blog yang berguna tentang multiprosesor python dari seorang insinyur produk di tim ESRI Analisis dan Geoprosesing. blogs.esri.com/esri/arcgis/2011/08/29/multiprocessing
Aaron

Jawaban:

11

Dalam pengalaman saya, masalah terbesar adalah mengelola stabilitas. Jika Anda melakukan enam minggu pemrosesan dalam satu malam, Anda juga akan memiliki enam minggu kesalahan dan bug yang tidak dapat dijelaskan.

Pendekatan alternatif adalah mengembangkan skrip mandiri yang dapat berjalan secara independen dan gagal tanpa menimbulkan masalah:

  • Membagi data menjadi potongan-potongan yang dapat diproses oleh satu inti dalam <20 menit (tugas).
  • Buat skrip Arcpy mandiri yang dapat memproses satu tugas dan sesederhana mungkin (pekerja).
  • Kembangkan mekanisme untuk menjalankan tugas. Banyak solusi python yang sudah ada sebelumnya. Atau Anda dapat membuatnya sendiri dengan antrian sederhana.
  • Tulis beberapa kode untuk memverifikasi bahwa tugas telah selesai. Ini bisa sesederhana memeriksa apakah file keluaran telah ditulis.
  • Gabungkan kembali data bersama.
Matthew Snape
sumber
1
Saya menemukan bahwa pendekatan ini, yang dapat mencakup penggunaan modul multiprosesor, adalah pendekatan yang bagus - beberapa ekstensi, seperti analis spasial, tidak berfungsi dengan baik jika Anda memiliki banyak salinan dari fungsi yang sama yang berjalan secara bersamaan, jadi sesuatu seperti apa yang Anda gambarkan yang memungkinkan bentuk antrian yang dikontrol pengguna (yaitu, menghindari menjadwalkan tugas-tugas tersebut pada saat yang sama atau menghindari menggunakan geodatabase yang sama sekaligus untuk alasan penguncian file) akan menjadi yang terbaik.
nicksan