Lô dữ liệu kiểm thử

Một phần của tài liệu (LUẬN văn THẠC sĩ) tối ưu hóa truy vấn tìm đường ngắn nhất trên đồ thị động quy mô lớn (Trang 30 - 32)

2.2. Các vấn đề liên quan

Để thực hiện các sự kiện thêm, xóa cạnh và truy vấn đường đi ngắn nhất trên đồ thị, hiện có rất nhiều công cụ và thư viện cho phép chúng ta làm điều đó. Ví dụ, gói NetworkX của ngôn ngữ lập trình Python là một bộ công cụ được tạo ra để xử lý, thao tác với đồ thị và mạng lưới phức tạp [12]. Trong NetworkX, nốt có thể là bất cứ đối tượng nào trong Python, cạnh có thể chứa dữ liệu tùy ý. NetworkX cũng cung cấp các lớp của đối tượng đồ thị, công cụ sinh để tạo ra đồ thị chuẩn, chương trình vào ra để đọc dữ liệu trong cơ sở dữ liệu, thuật toán để

phân tích đồ thị và một số công cụ hiển thị đồ thị cơ bản. Phần lớn giao diện lập trình ứng dụng của NetworkX được cung cấp dưới dạng các hàm, thủ tục với tham số đầu vào là đồ thị. Mã nguồn của mỗi mô đun rất dễ để đọc và đọc mã nguồn trên ngôn ngữ lập trình Python là cách tốt nhất để hiểu sâu hơn về thuật toán được sử dụng trong NetworkX. Bên cạnh đó, với hệ thống tài liệu hướng dẫn sử dụng, tài liệu chương trình rất cụ thể và thân thiện, tất cả mọi người đều có thể dễ dàng tìm hiểu công cụ NetworkX này [16].

Tương tự như NetworkX, Stanford Network Analysis Platform (SNAP) là bộ công cụ có hiệu năng cao trong việc phân tích, xử lý, thao tác với mạng dữ liệu lớn [20]. SNAP có thể xử lý mạng dữ liệu lớn lên đến hàng trăm triệu cạnh và hàng tỉ đỉnh. SNAP cung cấp hơn 140 thuật toán khác nhau để có thể thao tác hiệu quả với đồ thị dữ liệu lớn, tính toán đặc tính cấu trúc, khởi tạo đồ thị ngẫu nhiên, và xử lý các thuộc tính của đỉnh, cạnh dưới dạng mã nguồn mở C++ hoặc python. Bên cạnh khả năng làm việc với dữ liệu lớn, một điểm mạnh nữa của SNAP là các nốt, cạnh hay các thuộc tính của đồ thị có thể dễ dàng thay đổi trong quá trình tính toán. Điều này rất hữu ích đối với quá trình thêm/xóa cạnh liên tục trong đồ thị dữ liệu lớn đã được trình bày ở phần trên SNAP.

Các thư viện này cài đặt rất nhiều thuật toán để có thể tìm được khoảng cách ngắn nhất giữa hai đỉnh. Một trong những chiến lược hiệu quả nhất để tìm khoảng cách ngắn nhất này là tìm kiếm từ hai hướng theo ý tưởng duyệt đồ thị theo chiều rộng (BFS). Tuy nhiên, phần cài đặt của các thư viện này chưa được tối ưu vì những lý do như sau. Thứ nhất, đường đi ngắn nhất chỉ được tìm kiếm theo tuần tự (xử lý trên một chip), và việc lựa chọn hướng đi tiếp theo trong phần tìm kiếm theo hai hướng chỉ dựa trên số lượng các đỉnh trong danh sách hàng đợi. Việc này sẽ khiến thuật toán mất thêm rất nhiều thời gian để duyệt qua các đỉnh tiếp theo trong hàng đợi này.

Trong tối ưu hóa đồ thị dữ liệu lớn, GraphLab [22], PowerGraph [9], GraphX [10] là các công cụ được đánh giá cao khi xử lý dữ liệu trong đồ thị lớn cả về vấn đề phân tán và vấn đề tính toán song song. Những hệ thống này sẽ đạt được hiệu quả tốt nhất khi được cài đặt trên các siêu máy tính, các cụm máy chủ lớn. Tuy nhiên, giống như NetworkX và SNAP C++, chúng không thích hợp cho bài toán tìm đường đi ngắn nhất giữa hai điểm trong đồ thị thay đổi, trong trường hợp rất nhiều cạnh và đỉnh liên tục được thêm vào và xóa đi.

Liên quan đến đồ thị thay đổi, rất nhiều nhà nghiên cứu đã chú trọng đến vấn đề này, [15] [19] [21] cho thấy khối lượng công việc cần phải xử lý đối với bài toán tìm đường đi ngắn nhất trên biểu đồ vận tải thay đổi liên tục. Để áp dụng sức

mạnh của xử lý đa luồng [2] [3] [13] [14] miêu tả cấu trúc phù hợp song song hóa thuật toán duyệt đồ thị theo chiều rộng trên đồ thị lớn. Nhưng cuối cùng, các hành động thêm cạnh hay xóa cạnh vẫn chưa được chú ý đến trong các hệ thống này.

Để có thể tận dụng được sức mạnh của hệ thống đa luồng, đa nhân, đa tiến trình trong các bộ vi xử lý hiện nay, có rất nhiều thư viện đã hỗ trợ việc này. Cụ thể, trong ngôn ngữ lập trình C/C++, một số thư viện nổi tiếng được trình bày dưới đây.

OpenMP [17]

OpenMP là một giao diện lập trình ứng dụng (API) được dùng để song song hóa quá trình đa luồng, chia sẻ bộ nhớ. OpenMP bao gồm 3 thành phần API chính: biên dịch trực tiếp, thư viện chạy chương trình và biến môi trường. Các mục đích của OpenMP như sau:

- Chuẩn hóa

o Cung cấp chuẩn giữa rất nhiều kiến trúc/nền tảng chia sẻ bộ nhớ.

o Đã được định nghĩa và chứng thực bởi một nhóm các nhà phát triển phần cứng và phần mềm máy tính.

- Mục tiêu

o Xây dựng câu lệnh điều hướng đơn giản và hiệu quả cho các chương trình chia sẻ bộ nhớ trong máy tính.

o Quá trình song song hóa có thể được cài đặt chỉ sau 3 hoặc 4 câu lệnh điều hướng.

- Dễ dàng sử dụng

o Cung cấp khả năng nâng cao song song hóa trong một chương trình tuần tự.

o Cung cấp khả năng để thực hiện song song hóa trên cả chương trình đơn giản và chương trình phức tạp.

- Dễ dàng tiếp cận

o Sử dụng API cho ngôn ngữ lập trình C/C++ hoặc Fortran.

o Diễn đàn công cộng cho người sử dụng.

o Có thể cài đặt trên nền tảng Unix/Linux hoặc Windows.

Một phần của tài liệu (LUẬN văn THẠC sĩ) tối ưu hóa truy vấn tìm đường ngắn nhất trên đồ thị động quy mô lớn (Trang 30 - 32)

Tải bản đầy đủ (PDF)

(58 trang)