Tôi đang tìm kiếm một thư viện đồ thị động song song trong C ++


11

Xin chào cộng đồng scicomp,

Tôi đã làm việc trong lĩnh vực thuật toán đồ thị bằng cách sử dụng các khung như NetworkX (Python), JUNGYFiles (Java). Bây giờ tôi đang bước vào lĩnh vực điện toán độ song song và cao. Đối với một dự án mới, tôi đang tìm kiếm một thư viện đồ thị C ++ với các tính năng sau:

  • có giao diện trực quan cho phép phát triển thuật toán
  • hỗ trợ các hoạt động động: ví dụ: chèn và xóa nút / cạnh tùy ý
  • hỗ trợ song song hóa: ví dụ bảo vệ lập trình viên khỏi các vấn đề phát sinh với đa luồng
  • có chi phí bộ nhớ thấp và phù hợp với tính toán hiệu năng cao

Vui lòng đề xuất một số thư viện và thảo luận về các tiêu chí này cũng như ưu và nhược điểm.

Câu trả lời:


11

Thư viện đồ thị Boost và LEMON

Như Daniel đề cập trong câu trả lời toàn diện của mình , thư viện C ++ chung đầy đủ tính năng nhất là Thư viện đồ thị Boost . Có một phần mở rộng bộ nhớ phân tán mới có khả năng thực hiện một số thuật toán cơ bản như tìm kiếm theo chiều rộng và chiều sâu đầu tiên, cây bao trùm tối thiểu và tìm kiếm các thành phần được kết nối, nhưng tôi không rành lắm về dự án mới. Thư viện đồ thị Boost tự nó đã có uy tín và được sử dụng trong nhiều dự án trên khắp thế giới.

Nếu bạn đang làm công việc đồ thị HPC cơ bản, bạn có thể muốn bắt đầu với Thư viện đồ thị Boost, nhưng lưu ý rằng nhiều trình biên dịch HPC C ++ gặp khó khăn với Boost (mặc dù tuân thủ các tiêu chuẩn C ++ khá nghiêm ngặt) và bạn có thể cần phải sử dụng một phiên bản cũ hơn của Boost hoặc trình biên dịch không phải của nhà cung cấp như GCC để giúp nó hoạt động trên các hệ thống HPC.

Duyệt nhanh các kho lưu trữ của LEMON cho thấy có sự tham gia của nhóm siêu máy tính IBM BlueGene, nhưng tôi không thấy bất kỳ sự phụ thuộc hay cấu hình nào cho MPI, vì vậy hiện tại có thể đây chỉ là một thư viện đồ thị nối tiếp.

Cân bằng tải và đồ thị động (tái)

Nếu bạn quan tâm đến việc cân bằng tải và phân vùng biểu đồ động, bạn có thêm một số tùy chọn. Có lẽ thư viện nổi tiếng nhất là ParMETIS , đã được cập nhật lên phiên bản 4 năm ngoái. ParMETIS có trọng số dựa trên đỉnh, rất quan trọng đối với mô phỏng đa vật lý.

Đối thủ cạnh tranh châu Âu của ParMETIS là PT-Scotch , đã có hiệu suất tốt hơn cho một số loại vấn đề nhất định, nhưng, tương tự như ParMETIS, không được cập nhật thường xuyên.

Bạn cũng có thể quan tâm đến Zoltan , một phần của gói meta Trilinos của Phòng thí nghiệm quốc gia Sandia dành cho điện toán khoa học trong C ++. Zoltan có các phân vùng và giao diện phân cấp riêng của mình vào cả ParMETIS và PT-Scotch.

Đồ thị 500

Nếu bạn đang làm việc trên cạnh chảy máu của tìm kiếm đồng thời, tối ưu hóa (đường dẫn ngắn nhất nguồn đơn) và định hướng cạnh (bộ độc lập tối đa), bạn cũng sẽ quan tâm đến điểm chuẩn Graph500 có sẵn miễn phí .


1
Câu hỏi: Thư viện đồ thị tăng cường song song có nghĩa là cho song song bộ nhớ phân tán. Thư viện đồ thị Boost thông thường có phù hợp để song song bộ nhớ chia sẻ với OpenMP không?
clstaudt

@clstaudt - Đây sẽ là vấn đề cụ thể. Bạn sẽ phải tìm hiểu sâu hơn về các chi tiết của thuật toán của bạn để có câu trả lời tốt hơn (và nó có thể sẽ là một câu hỏi mới).
Aron Ahmadia

5

Có lẽ, Thư viện đồ thị Boost là những gì bạn đang tìm kiếm. Nó có một trình phân tích cú pháp để đọc các biểu đồ được chỉ định ở định dạng DOT của GraphViz. Mặc dù tôi không thực sự biết về chi phí bộ nhớ, nhưng nó cung cấp một biến thể để song song hóa .

Một thư viện đồ thị khác là LEMON nhưng tôi không thực sự biết nó và nếu nó có hỗ trợ song song hóa, nó không được quảng cáo. Trang web này tạo ấn tượng tốt mặc dù;)


LEMON cũng có vẻ tốt với tôi, nhưng tôi hoàn toàn không biết liệu tôi có thể sử dụng nó cho mã song song bộ nhớ chia sẻ (OpenMP) hay không.
clstaudt

Tôi cũng vậy, thành thật mà nói. Nhưng có lẽ bạn có thể sử dụng nó để khai báo các cấu trúc dữ liệu được chia sẻ cho vấn đề của mình và chạy các thuật toán của nó trong các luồng khác nhau. Có lẽ bạn có thể chia nhỏ vấn đề của bạn thành các bài toán con phù hợp.
Daniel Eberts

5

Tôi cũng muốn đề cập đến STinger , một cấu trúc dữ liệu đồ thị động được thiết kế cho sự song song. Theo trang web, nó được thiết kế cho các mục tiêu sau:

Tính di động: Các thuật toán được viết cho STinger có thể dễ dàng được dịch / chuyển giữa nhiều ngôn ngữ và khung

Năng suất: STinger nên cung cấp một cấu trúc dữ liệu trừu tượng chung để cộng đồng đồ thị lớn có thể nhanh chóng thúc đẩy sự phát triển nghiên cứu của nhau. Điều này tương tự trong triết học với cộng đồng thuật toán số sử dụng ngầm các ma trận thưa thớt và dày đặc.

Hiệu suất: Người ta nhận ra rằng không có cấu trúc dữ liệu duy nhất nào là tối ưu cho mọi thuật toán đồ thị. Mục tiêu của STinger là cấu hình một cấu trúc dữ liệu hợp lý có thể chạy tốt hầu hết các thuật toán. Không nên giảm hiệu suất đáng kể khi sử dụng STinger khi so sánh với một cấu trúc dữ liệu chung khác trên một tập hợp rộng các thuật toán đồ thị điển hình. STinger nên giả sử một không gian địa chỉ bộ nhớ dùng chung và cho phép cả hai thuật toán tuần tự hoặc song song. Cấu trúc dữ liệu nên cho phép các thuật toán song song khai thác đồng thời nếu có thể.

Nó không chung chung như LEMON hoặc Boost Graph Library và trong giai đoạn phát triển trước đó. Nếu bạn kiểm tra nó, tôi sẽ quan tâm đến ý kiến ​​của bạn.


STinger Ra khỏi phòng thí nghiệm của David Bader tại Georgia Tech. Anh ấy nổi tiếng trong cộng đồng HPC vì đã làm việc trên Graph500, cảm ơn vì đã đề cập đến cái này!
Aron Ahmadia
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.