OGR / GDAL diş açma, düşük çekirdek kullanımıyla sonuçlanır


13

Ogr / gdal kullanarak bazı raster verilerini işlemeye çalışıyorum ve makinemdeki tüm çekirdeklerden tam olarak yararlanamıyorum. İşlemi yalnızca tek bir çekirdek üzerinde yürüttüğümde, bu çekirdeğin% 100'ünü kullanıyorum. Çok çekirdekli olarak ayırmaya çalıştığımda (aşağıdaki örnekte, x ofsetlerini toplayıp sıraya koyarak), 8 çekirdeğimin her birinde acıklı bir kullanım elde ediyorum. Her bir çekirdeğe sadece% 100'e kadar kullanım katıyor gibi görünüyor (örneğin, her birinde% 12.5).

Aynı veri kaynağını kullanarak darboğazdan endişeliydim, ama sonra her bir çekirdek için altta yatan raster dosyasını çoğalttım ... ve çekirdek kullanımı hala saçmalık. Bu, ogr veya gdal'ın bir şekilde bir darboğaz paylaşılan kaynağı gibi davrandığına inanmamı sağlıyor, ancak bu konuda çevrimiçi bir şey bulamıyorum. Herhangi bir yardım çok takdir edilecektir!

Bu, her İşçi iş parçacığının içinde çalışan "yardımcı" işlevidir:

def find_pixels_intersect_helper(datasource, bounds_wkt, x_min, x_max):
    bounds = ogr.CreateGeometryFromWkt(bounds_wkt)
    rows_to_write = []
    for x_offset in range(x_min, x_max):
        for y_offset in range(datasource.RasterYSize):
            pxl_bounds_wkt = pix_to_wkt(datasource, x_offset, y_offset)
            pxl_bounds = ogr.CreateGeometryFromWkt(pxl_bounds_wkt)
            if pxl_bounds.Intersect(bounds):
                rows_to_write.append(['%s_%s' % (x_offset, y_offset), pxl_bounds.Centroid().ExportToWkt()])

Olası değil, ama belleğin darboğaz olup olmadığını kontrol ettiniz mi?
lynxlynxlynx

@lynxlynxlynx - evet. Bellek kesinlikle darboğaz değildir. Bütün gün bu ţeyi izlemeye çalýţýyorum ... bu oldukça garip.
Maksimum

Kullandığınız tarama sürücüsünün bir kerede birden fazla iş parçacığından çağrılacak şekilde tasarlanmamış olması olabilir. Referans: mail-archive.com/gdal-dev@lists.osgeo.org/msg07283.html
blah238

Yanıtlar:


10

TAMAM. Hayatımın bir günüydü, bir daha asla geri dönemeyeceğim. Sorunun yukarıda gönderdiğim kodda olmadığı ortaya çıktı. Tamamen iyi. Bunun bir iş parçacığı örneği olduğu ortaya çıkıyor.

As işaret piton belgelerinde :

Çok işlemli paket, hem yerel hem de uzak eşzamanlılık sunar ve iş parçacıkları yerine alt işlemler kullanarak Global Tercüman Kilidini etkin bir şekilde yönlendirir. Bu nedenle, çok işlem modülü, programlayıcının belirli bir makinede birden fazla işlemciden tam olarak yararlanmasına izin verir

Böylece, iş parçacığı IO-yoğun işlemler, çoklu işleme içindir.İşlem CPU yoğun işlemler içindir. İşlem ve her şey harika çalışıyor.

Çok işlemciliğin nasıl kullanılacağını öğrenmek için bu eğiticiye göz atın.


Sadece hangi uygulamayı kullandığınızdan emin değildim ( 3. parti uygulamalar da var ) :) Bunu son zamanlarda burada düzgün bir bina gölgeleri aracı hızlandırmak için kullandım: “Bina Gölgeleri Üretme” Limanı ArcGIS 10 kod
blah238

+1 GDAL-dev posta listesinde bir kelime olması gerektiğini söylemek üzereydim; ama şimdi memnun değilim! Bu, ileride referans olması için yok edildi.
MerseyViking

FWIW (muhtemelen çok fazla değil), insanların küresel tercüman kilidi (GIL) sorununu düzeltmeye çalışmak için para topladıklarını okudum. 3.x için olacağını düşünüyorum.
canisrufus
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.