Xu hướng tích hợp xử lý song song trong các phần mềm GIS

Gửi bởi edic  |  06 Tháng Mười Hai 2016 5:04:48 SA  | 

Nếu như trong 5 đến 10 năm trước, tính toán song song trong GIS còn là một khái niệm mới trong cộng đồng GIS thì ngày nay xu hướng này có vẻ đang xuất hiện với nhiều nỗ lực lớn với nhiều “ông lớn” tham gia.


Tại Google Summer of Code 2015 tháng 8 năm 2015, nhóm Boundless đã trình diễn gói thuật toán công cụ hỗ trợ xử lý trong QGIS có nhiều tính năng nổi trội, trong đó có xử lý đa luồng (multithreading) là một trong tính năng dự kiến sẽ xuất hiện trong phiên bản QGIS 3.0. QGIS đã có nỗ lực lớn để thực hiện cơ chế đa luồng (multithearded) từ phiên bản 2.4 (2014). Trước đó, vào năm 2012, đối với phần mềm thương mại ArcGIS, gói Python ArcPy được hỗ trợ môi trường tính toán song song từ phiên bản 10.1 SP1. Và phiên bản 10.2, Esri đã công bố tính năng tính toán song song là 1 trong 10 tính năng nổi bật của ArcGIS, đặc biệt đối với geoprocessing. Tất nhiên, các sản phẩm sau đó như ArcGIS Pro mặc định là đã tích hợp xử lý trên nhiều CPU. Xét về công nghệ, năm 2010 Microsoft đã “ra lò” .NET framework 4.0 cùng với bộ Visual Studio 2010 hỗ trợ tính toán song song trên các “core” trên máy cục bộ.
 

 

Hình minh họa về tài nguyên CPU trong bộ xử lý gồm 8 lõi [2]


Câu chuyện về tính toán bằng nhiều CPU bắt đầu sôi động khi các ứng dụng GIS ngày nay bắt đầu phải chuyển mình, tăng số chiều (không gian, thời gian) để đáp ứng nhu cầu về mô hình hóa thế giới thực cũng như chất lượng các đầu thu dữ liệu tăng dần (như dữ liệu lidar hoặc dữ liệu do nhiều người nhập). Và GIS đã và đang hội đủ 3 yếu tố chính về tiêu chuẩn của ứng dụng BIG DATA (dữ liệu lớn): nhiều người truy cập/xử lý; dữ liệu có tính chi tiết tăng cao, đặc biệt các phân tích hoặc dữ liệu có nguồn gốc từ các ảnh viễn thám, hàng không; thay đổi về dữ liệu nhanh chóng để đáp ứng với sự thay đổi thực tế. Theo đó, để xử lý được, các nguồn lực tính toán phải được tăng cường về chất về lượng. Các hạ tầng phần cứng được tăng tốc đồng thời số lượng các bộ xử lý tham gia phải được tăng cường.


Trên hệ thống tính toán desktop nhiều lõi, .NET 4.0 trong phiên bản Visual Studio 2010 đã bắt đầu thực hiện song song hóa thông qua hai loại: thư viện tác vụ song song (TPL – Task Parallel Library) và Parallel LINQ. Parallel LINQ được xây dựng trên nền tảng TPL và mở rộng thành một extension song song. Với TPL, thư viện gồm hai lớp song song quan trọng là lớp Task và lớp Parallel. Lớp Task là phương pháp để thay thế cho mô hình đoạn tuyến (thread) trước đây. Còn lớp Parallel là lớp tĩnh được cung cấp 3 phương thức tính toán song song: For, Foreach và Invoke. Về mặt kỹ thuật, chúng ta có hai khái niệm đó là: song song (parallel) và đồng thời (concurrency). Thuật ngữ concurrency đề cập đến nhiều tác vụ không liên quan với nhau được xử lý cùng lúc. Khi đó, những tác vụ không liên quan sẽ chia sẻ các tài nguyên hệ thống tuy nhiên chúng sẽ không chia sẻ vấn đề chung, nghĩa là về mặt logic chúng hoàn toàn độc lập nhau. Cơ chế giải quyết các concurrency được thể hiện bằng các đoạn tuyến (thread) và vấn đề gặp phải là giải quyết các vấn đề toàn cục, thường dẫn đến hiện tượng chờ (deadlock) và hiện tượng dữ liệu bị thay đổi liên tục (data race). Lập trình đoạn tuyến cực khó để quản lý và công tác bắt lỗi (debug) trở nên phức tạp. Trong khi đó, thuật ngữ parallel thường nói đến một tác vụ cụ thể và được chia thành tập các tác vụ con liên quan với nhau được thực thi cùng lúc. Từ đó cho thấy việc lập trình song song (parallel) thật sự là một thách thức lớn với những tiềm năng vượt trội cũng như những khó khăn mà lập trình đoạn tuyến phải giải quyết. Với .NET 4.0, việc lập trình song song được hỗ trợ tối đa với các cơ chế…


Với phần mềm ArcGIS, cơ chế hỗ trợ xử lý song song được hỗ trợ bằng việc cài đặt môi trường (environment setting). Tham số tính toán là Parallel Processing Factor được nhập là một số bộ xử lý hoặc theo tỉ lệ phần trăm, chính bằng số tiến trình mà công cụ xử lý. Mặc định tham số này sẽ rỗng (empty), khi đó công cụ sẽ chọn số lượng bộ xử lý tham gia. Đây là giá trị mặc định. Ngoài ra, với giá trị 0, chúng ta xác lập số lượng bộ xử lý là 1 và nếu số n chính là số lượng bộ xử lý tham gia. Bên cạnh đó, giá trị k% cũng được sử dụng khi chúng ta cần đến nhiều bộ xử lý. Ví dụ dưới đây thiết lập môi trường sử dụng 50% số lượng bộ xử lý, nghĩa là với máy có 6 bộ xử lý thì chúng ta sử dụng 3 bộ xử lý:


import arcpy

 

# Use half of the cores on the machine.

arcpy.env.parallelProcessingFactor = "50%"


Tuy nhiên, trong thiết kế và thực thi trên hệ thống, điều lưu ý khi sử dụng cơ chế tính toán song song là các phần mềm cần được đồng bộ về khả năng, tính năng xử lý. Ví dụ Microsoft SQL Server Express chỉ cho phép 3 kết nối đồng thời, do đó, nếu một máy có 4 bộ xử lý cùng xử lý song song kết nối đến thì SQL Server Express có thể chỉ xử lý được 2 tác vụ (do 1 tác vụ có thể từ một phần mềm như ArcGIS đã chiếm dụng). Tất nhiên, khi sử dụng được tính năng xử lý song song, chúng ta hoàn toàn có những ẩn tượng về tốc độ xử lý. Ví dụ chúng ta có thể “tận hưởng” tốc độ đọc dữ liệu trên các hệ thống cơ sở dữ liệu phiên bản Enterprise bằng lệnh Add Rasters to Mosaic Dataset,…

CTXP tổng hợp theo Khưu Minh Cảnh- Trung tâm Ứng dụng GIS TP. HCM