Tùy chỉnh triển khai chức năng ArcGIS


9

Tôi muốn tìm hiểu những gì nó cần để tạo ra một triển khai tùy chỉnh của một chức năng ArcGIS. Cụ thể, tôi muốn triển khai GeoAnalyst.ISurfaceOp2.Visibility () để làm cho nó chạy nhanh hơn. Ngay bây giờ, sẽ mất ~ 3 giây cho mỗi cuộc gọi đến Hiển thị (). Từ hiểu biết hạn chế của tôi, nút cổ chai là việc viết các trình quét tạm thời vào hệ thống tệp. Nếu điều này có thể được thực hiện trong bộ nhớ, tôi nghi ngờ thời gian xử lý sẽ giảm đáng kể. Tôi đang làm điều này trong một dự án .NET, nhưng các giải pháp trong bất kỳ ngôn ngữ nào đều được chào đón.


Tại sao không chỉ có các trình quét tạm thời được ghi vào đĩa RAM? Sau đó, bạn sẽ không phải mã hóa khả năng hiển thị từ đầu, đi kèm với rủi ro và chi phí riêng.
whuber

Nghe có vẻ tuyệt vời. Làm thế nào tôi sẽ đi về làm điều đó? Đó không phải là những gì @Radar không thể có trong câu trả lời dưới đây?
Ross Fuhrman

4
Bạn cài đặt một đĩa RAM trên hệ thống của bạn; chi tiết khác nhau với hệ điều hành. Sau đó, bạn trỏ thư mục cào ArcGIS vào nó. Bạn có thể sử dụng SSD gần như tốt, đặc biệt là nếu trình quét của bạn rất lớn hoặc nếu bạn không có nhiều RAM.
whuber

Tôi thích ý tưởng đĩa RAM. SSD là rủi ro vì chúng không tuyệt vời cho các hoạt động đọc / ghi liên tục vì bạn có thể sử dụng nó nhanh chóng.
Radar

2
Một ổ SSD dựa trên flash sẽ tồn tại 1 - 5 triệu ghi, @Radar, nhưng SSD DRAM hoàn toàn không "hao mòn". Truy cập repositoryagesearch.com để biết thêm (rất nhiều).
whuber

Câu trả lời:


5

Câu trả lời này tưởng niệm và mở rộng về một số cuộc thảo luận trong các ý kiến. Một đĩa RAM giả lập một ổ đĩa gắn ngoài sử dụng một số RAM trong một hệ thống máy tính. Nó có thể đọc và ghi với tốc độ tương đương với bộ nhớ đệm trong bộ nhớ, trừ một chút chi phí cho các giao thức dịch để chuyển đổi các lệnh hướng đĩa sang các lệnh hướng bộ nhớ. Một đĩa RAM được tạo bằng cách chạy phần mềm cấp hệ điều hành đặc biệt, "trình điều khiển thiết bị". Mã nguồn mở và đĩa RAM miễn phí có sẵn cho nhiều hệ điều hành, bao gồm cả Windows.

Do đó, một cách để tăng tốc độ tắc nghẽn do I / O của đĩa trung gian là thiết lập đĩa RAM (mua thêm RAM nếu cần thiết) và đặt thư mục cào ở đó. (Đây thường là cài đặt phần mềm.)

Một tùy chọn khác là cài đặt một thiết bị trạng thái rắn DRAM cao cấp (SSD), về cơ bản là một khối RAM trong bao bì riêng biệt với giao diện điện tử để hoạt động như một ổ đĩa. Nó cài đặt trong một hệ thống máy tính thay cho ổ đĩa và sẽ hoạt động chính xác như một ổ đĩa khác mà không cần bất kỳ phần mềm bổ sung nào, nhưng sẽ đọc và ghi gần như nhanh như bộ nhớ truy cập. Đây là tương đối đắt tiền, nhưng có thể chỉ cần một cái nhỏ ngay cả đối với lưu trữ raster trung gian rất lớn.

Trước khi thực hiện bất kỳ bước nào trong số này, điều quan trọng là phải lập hồ sơquá trình xác định nơi tắc nghẽn thực sự là. (Windows đã được phân phối với các ứng dụng giám sát và định hình ngày càng mạnh mẽ trong những năm gần đây, có sẵn trong Win 7 dưới dạng cặp Trình quản lý tác vụ / Trình giám sát tài nguyên và tất nhiên cũng có nhiều ứng dụng tương tự có sẵn cho các HĐH khác.) có thể được cấu hình, để bộ đệm đọc và ghi vào RAM trong thời gian ngắn. Bộ nhớ đệm hoạt động gần giống như đĩa RAM, nhưng thậm chí còn nhanh hơn: phần mềm nghĩ rằng nó đang ghi các tệp trung gian vào đĩa, nhưng HĐH tạm thời ghi chúng vào RAM, không truy cập vào đĩa, với hy vọng rằng sẽ sớm có cùng dữ liệu sẽ được đọc lại và xóa, trong trường hợp đó, một ghi vật lý sẽ không bao giờ cần thiết.

Với số lượng tính toán cần thiết cho bất kỳ tính toán khả năng hiển thị đầy đủ (trong thuật toán ngây thơ, mỗi ô phải được kiểm tra mức độ hiển thị một lần cho mỗi quan điểm), ít nhất người ta nên nghi ngờ rằng tốc độ tính toán, không phải I / O của đĩa, có thể là vấn đề đây. Nếu đó là trường hợp, đĩa RAM hoặc SSD sẽ lãng phí thời gian và tiền bạc. Thay vào đó, nỗ lực nên được hướng vào việc phân tích và cải thiện thuật toán cơ bản .

Một số thảo luận về việc liệu hiệu năng đĩa RAM có giúp ArcGIS xuất hiện trong một luồng khác hay không .


+1 Phản ứng tuyệt vời. Tôi nghĩ rằng mọi người cũng nên chú ý đến việc sử dụng mục đích chung của đơn vị xử lý đồ họa, hoặc GPGPU . Tôi nghi ngờ hầu hết các trò chơi bắn súng góc nhìn người thứ nhất tận dụng GPU để xác định khả năng hiển thị của vật thể từ vị trí của người bắn. Sẽ thật tuyệt khi thấy một triển khai OpenCL của vấn đề này. Có lẽ nếu GIS sử dụng GPU nhiều hơn, thì nó có thể thu hút sự chú ý của những đứa trẻ lớn lên chơi trò chơi điện tử.
Kirk Kuykendall

Ngoài ra tôi muốn đề cập đến GPU được tối ưu hóa để thực hiện những việc như xác định bề mặt ẩn , tương tự như những gì ISurfaceOp2.Visibility làm.
Kirk Kuykendall

Ý tưởng hay, @Kirk. Manifold sử dụng GPU NVIDIA (và đã làm như vậy trong vài năm). Cũng có nghiên cứu độc lập về mặt trận này; Tôi đã là một phần của một số nỗ lực đề xuất tài trợ để phát triển triển khai đại số bản đồ dựa trên GPU.
whuber

Đây là một câu trả lời tuyệt vời. Tôi đã thực hiện hồ sơ đề xuất, và dường như có thể có một nút cổ chai I / O. Vì vậy, tôi đã triển khai một giải pháp sử dụng đĩa RAM (tôi đã chọn IMDisk). Cuối cùng, điều này không làm giảm thời gian để hoàn thành quá trình.
Ross Fuhrman

Tôi rất tiếc khi biết không có sự cải thiện. Khả năng hiển thị là một phép tính đắt tiền: về nguyên tắc, mọi ô trong DEM phải được kiểm tra cho mỗi người quan sát và quá trình kiểm tra có thể phải xem xét toàn bộ một dòng ô giữa người quan sát và ô DEM: có thể có nghĩa là hàng tỷ phép tính trên mỗi người quan sát ngay cả trên một lưới (megapixel) khiêm tốn. Nếu thời gian tính toán là vấn đề, hai tùy chọn tốt nhất của bạn có khả năng (1) song song hóa công việc: phân chia người quan sát trên các máy trạm, tính toán khả năng hiển thị, kết hợp các kết quả; và (2) viết mã hiển thị của riêng bạn.
whuber

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.