ArcGIS'de çok çekirdekli işlemeyi optimize etme yöntemleri


12

Bir masaüstü bilgisayarda mevcut olan çok çekirdekli işlem gücünü tam olarak kullanmak için öğrenme yöntemleri ile ilgileniyorum. Arc, arkaplan coğrafi işleminin kullanıcının birden fazla çekirdeği kullanmasına izin verdiğini, ancak görevlerin esasen bir önceki görevin tamamlanması için sırada beklemesi gerektiğini belirtir.

Arc / Python'da paralel veya çok iş parçacıklı coğrafi işleme yöntemleri geliştiren var mı? Bireysel görevlerde çok çekirdekli işlemeyi engelleyen donanım darboğazları var mı?

Coğrafi işleme örneği olmamasına rağmen, Stackoverflow'da ilgimi çeken ilginç bir örnek buldum:

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 deneyimimde, neredeyse her zaman 1) verilerinizi {çekirdek sayısı) parçalara bölmek, işlemek ve yeniden birleştirmek veya 2) her şeyi belleğe okumak ve x API'nin iş parçacığını işlemesine izin vermek. unutmayın this is not meant to discourage.
valveLondon

Teşekkürler valveLondon. Belki de daha yeni Ivy Bridge teknolojisi ve Kepler GPU, daha karmaşık işleme yaklaşımlarına izin verecektir.
Aaron

ESRIs Analysis and Geoprocessing ekibindeki bir ürün mühendisinden python çoklu işleme hakkında yararlı bir blog bağlantısı. blogs.esri.com/esri/arcgis/2011/08/29/multiprocessing
Aaron

Yanıtlar:



11

Deneyimlerime göre en büyük sorun istikrarı yönetmek. Tek bir gecede altı haftalık işlem yaparsanız, altı haftalık açıklanamayan hatalar ve hatalarınız da olacaktır.

Alternatif bir yaklaşım, bağımsız olarak çalışabilen ve sorun yaratmadan başarısız olabilecek bağımsız komut dosyaları geliştirmektir:

  • Verileri tek bir çekirdeğin <20 dakika içinde işleyebileceği yığınlara bölün (görevler).
  • Tek bir görevi işleyebilen ve olabildiğince basit (çalışan) bağımsız bir Arcpy komut dosyası oluşturun.
  • Görevleri yürütmek için bir mekanizma geliştirin. Önceden var olan birçok python çözümü var. Alternatif olarak basit bir kuyruk ile kendiniz de yapabilirsiniz.
  • Görevlerin tamamlandığını doğrulamak için bir kod yazın. Bu, bir çıktı dosyasının yazıldığını kontrol etmek kadar basit olabilir.
  • Verileri tekrar birleştirin.

1
Çok işlem modülünü kullanmayı içerebilen bu yaklaşımın iyi olduğunu gördüm - mekansal analist gibi bazı uzantılar, aynı işlevin aynı anda birden fazla kopyası varsa, çok iyi çalışmıyor, bu yüzden böyle bir şey Kullanıcı tarafından denetlenen bir sıraya alma biçimine izin veren (yani, bu görevleri aynı anda planlamaktan veya dosya kilitleme nedenleriyle aynı coğrafi veritabanını bir kerede kullanmaktan kaçınmak) en iyi yöntemdir.
nicksan
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.