Phương pháp tối ưu hóa xử lý đa lõi trong ArcGIS


12

Tôi quan tâm đến các phương pháp học tập để sử dụng toàn bộ sức mạnh xử lý đa lõi có sẵn trên máy tính để bàn. Arc tuyên bố rằng việc xử lý địa lý nền cho phép người dùng sử dụng nhiều lõi, tuy nhiên, về cơ bản, các nhiệm vụ phải chờ xếp hàng để hoàn thành nhiệm vụ trước đó.

Có ai đã phát triển các phương thức xử lý địa lý song song hoặc đa luồng trong Arc / Python chưa? Có các tắc nghẽn phần cứng ngăn chặn xử lý đa lõi trên các tác vụ riêng lẻ không?

Tôi đã tìm thấy một ví dụ thú vị trong Stackoverflow thu hút sự quan tâm của tôi, mặc dù đó không phải là một ví dụ về địa lý:

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
Theo kinh nghiệm Arc của tôi, hầu như luôn luôn nắm bắt được 1) chia dữ liệu của bạn thành các phần {số lõi}, xử lý và lắp lại hoặc 2) đọc mọi thứ vào bộ nhớ và để x API xử lý luồng. lưu ý this is not meant to discourage.
vanLondon

Cảm ơn vanLondon. Có lẽ công nghệ Ivy Bridge mới hơn và GPU Kepler sẽ cho phép các phương pháp xử lý tinh vi hơn.
Aaron

Đây là một liên kết đến một blog hữu ích về đa xử lý python từ một kỹ sư sản phẩm trong nhóm Phân tích và Xử lý địa lý ESRI. blog.esri.com/esri/arcgis/2011/08/29/multiprocessing
Aaron

Câu trả lời:



11

Theo kinh nghiệm của tôi, vấn đề lớn nhất là quản lý sự ổn định. Nếu bạn thực hiện sáu tuần xử lý trong một đêm, bạn cũng sẽ có sáu tuần lỗi và lỗi không thể giải thích được.

Một cách tiếp cận khác là phát triển các tập lệnh độc lập có thể chạy độc lập và thất bại mà không gây ra sự cố:

  • Chia dữ liệu thành các phần mà một lõi đơn có thể xử lý trong <20 phút (tác vụ).
  • Xây dựng một kịch bản Arcpy độc lập có thể xử lý một tác vụ duy nhất và càng đơn giản càng tốt (worker).
  • Phát triển một cơ chế để chạy các nhiệm vụ. Rất nhiều giải pháp trăn tồn tại từ trước. Ngoài ra, bạn có thể làm cho riêng mình với một hàng đợi đơn giản.
  • Viết một số mã để xác minh rằng các nhiệm vụ đã được hoàn thành. Điều này có thể đơn giản như kiểm tra xem một tập tin đầu ra đã được viết.
  • Hợp nhất dữ liệu lại với nhau.

1
Tôi đã thấy rằng phương pháp này, có thể bao gồm sử dụng mô-đun đa xử lý, là một phương pháp tốt - một số tiện ích mở rộng, chẳng hạn như phân tích không gian, không hoạt động tốt nếu bạn có nhiều bản sao của cùng một chức năng chạy cùng một lúc những gì bạn mô tả cho phép hình thức xếp hàng do người dùng kiểm soát (nghĩa là tránh lập lịch cho các tác vụ đó cùng một lúc hoặc tránh sử dụng cùng một cơ sở dữ liệu địa lý cùng một lúc vì lý do khóa tệp) sẽ là tốt nhất.
nicksan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.