Phần mềm nào tốt để sử dụng để gỡ lỗi song song?


24

Tôi hiện không chạy bất kỳ mã song song nào, nhưng tôi dự đoán sẽ chạy mã song song trong tương lai bằng cách sử dụng kết hợp OpenMP và MPI. Trình gỡ lỗi đã là công cụ vô giá đối với tôi khi chạy các dự án nối tiếp.

Bất cứ ai cũng có thể đề xuất một trình gỡ lỗi song song (hoặc nhiều trình gỡ lỗi) để sử dụng để gỡ lỗi phần mềm song song? Phần mềm miễn phí sẽ được ưa thích hơn, nhưng đừng ngần ngại đề cập đến phần mềm thương mại hiệu quả.


Tôi không thấy các câu trả lời ở đây sẽ khác biệt đáng kể như thế nào so với stackoverflow.com/questions/329259/ . MPI là phần khó ở đây, không phải OpenMP. Trong mọi trường hợp, gỡ lỗi điều kiện cuộc đua trong các chương trình luồng là ranh giới không thể giải quyết ngay bây giờ.
Jeff

ThreadSanitizer là một giải pháp tốt để gỡ lỗi các điều kiện chủng tộc trong các chương trình luồng, mặc dù tôi không biết ai đã cố gắng thêm MPI vào hỗn hợp!
mabraham

Câu trả lời:


17

Về cơ bản có hai lựa chọn chính, thương mại: DDT từ Allinea (đó là những gì chúng tôi sử dụng tại TACC ) và Totalview (như đã đề cập trong bình luận khác). Chúng có các tính năng tương đương, đều được phát triển tích cực và là đối thủ cạnh tranh trực tiếp.

Eclipse có Nền tảng công cụ song song của họ , bao gồm hỗ trợ lập trình MPI và OpenMP và trình gỡ lỗi song song.


Tôi chưa bao giờ nghe nói về bất cứ ai sử dụng trình gỡ lỗi song song PTP. Tôi không chắc điều đó có nghĩa là gì ...
Jeff

Tôi có một vài đồng nghiệp đã thử, nhưng tôi chưa bao giờ chơi với nó.
Bill Barth

16

Tôi phải đưa ra câu trả lời curmudgeon. Năng suất của tôi chưa bao giờ được cải thiện bởi bất kỳ đề xuất nào ở trên. Chúng chậm và đắt so với tùy chọn ưa thích của tôi song song: một phiên gdb cho mỗi quy trình. Mỗi gdb có thể kết nối với một quy trình MPI và ngồi trong một xterm (điều này tự động xảy ra trong PETSc sử dụng -start_in_debugger). Tôi đã sử dụng điều này trong 15 năm, hạnh phúc. Phản đối:

1) Tôi không thể nhìn vào dữ liệu toàn cầu

Vì MPI là mô hình không chia sẻ, không có dữ liệu toàn cầu, chỉ có dữ liệu cục bộ

2) Chiến lược này không mở rộng ra nhiều quy trình

Không làm lỗi. Lỗi xảy ra trên các quy trình riêng lẻ, có thể với đầu vào từ 1 hoặc 2 hàng xóm. YOu có thể dễ dàng sinh ra gdb chỉ trên các quy trình tham gia ( -debugger_nodes 0,5,17ví dụ trong PETSc bạn sử dụng ). Ngoài ra, các hệ thống trên bỏ rất nhiều khi chạy trên mọi quy trình, khiến chúng chậm. Phương thức gdb trên thực tế có khả năng mở rộng hơn nhiều.

gdb cũng rất di động. Nó chạy ở mọi nơi, hiểu C ++ và Fortran và cho phép bạn thực thi mã tùy ý trong khi chạy. Tôi đã viết các chức năng đặc biệt để dễ dàng hiển thị dữ liệu khi chạy trong đó.


4
Này Coward, nếu bạn downvote, hãy để lại nhận xét.
Matt Knepley

5
Tôi đã không bỏ phiếu, nhưng tôi không đồng ý ở một mức độ nào đó. Tôi đã gặp một vài lỗi ở quy mô không hiển thị ở kích thước nhỏ và sử dụng trình gỡ lỗi song song là một cách hiệu quả để tìm thấy chúng. Tôi thực hiện hầu hết các sửa lỗi của mình với printf và đính kèm vào các tiến trình riêng lẻ với gdb, nhưng tôi đã thấy được lợi ích của việc có một trình gỡ lỗi song song.
Bill Barth

3
Lần duy nhất tôi gặp phải một lỗi ở quy mô là lỗi hiệu năng do thuật toán giao tiếp tập thể không phù hợp được chọn. Sau đó, một lần nữa, quan điểm của tôi thậm chí còn cực đoan hơn Matt, vì thứ gần gũi nhất với trình gỡ lỗi mà tôi từng sử dụng là valgrind.
Jack Poulson

1
@BillBarth Tôi biết bạn đã đúng rằng các lỗi tồn tại trên 1000 quy trình không xuất hiện trên các vấn đề nhỏ hơn (Dinesh có một PETSc nổi tiếng tồn tại trong nhiều tháng chỉ xuất hiện trên 82 procs). Quan điểm của tôi là nhiều hơn để chống lại sự khôn ngoan phổ biến. Tôi nghĩ rằng trình gỡ lỗi song song là giải pháp cuối cùng tốt, không phải là giải pháp đầu tiên.
Matt Knepley

3
Tôi đánh giá thấp bạn. Câu trả lời của bạn không phải là những gì được hỏi.
aterrel

5

Tôi chỉ sử dụng hai trình gỡ lỗi cho các chương trình nối tiếp và song song:

  1. Trình gỡ lỗi Kernighan, tức là các bản in hợp lý và suy nghĩ cẩn thận.
  2. Nhiều phiên bản của GDB như được mô tả o http://www.open-mpi.org/faq/?carget=debugging#serial-debuggers .

Trong trường hợp (2) không đủ khả năng mở rộng, tôi tham khảo (1b).


1
Tôi chưa bao giờ nghe cái tên "Trình gỡ lỗi Kernighan", nhưng tôi tán thành, vì đó là cách tôi luôn gỡ lỗi.
Jack Poulson

4

Intel Parallel Studio bao gồm trình gỡ lỗi song song. Tôi chưa bao giờ làm việc với nó nhưng tôi đã thấy nó được sử dụng trong một vài bản demo. Đây là một video hướng dẫn cho thấy một số tính năng.

Tôi cũng đã thấy một vài hàm bao quanh gdb hoạt động khá tốt trong một số trường hợp nhất định.


3

Tổng quan . Đó là một trình gỡ lỗi thương mại. Rất dễ dàng để xem ngăn xếp trên mỗi bộ xử lý. Bạn có thể thấy các giá trị biến (và thay đổi chúng) trên các bộ xử lý / luồng. Bạn có thể vẽ các vectơ hoặc matracies để trực quan hóa các giá trị biến. Rõ ràng kịch bản cũng có thể (Tk / Tcl), để phân tích điểm đồng hồ tinh vi, mặc dù tôi chưa bao giờ làm việc với điều này.


Về mặt chủ quan, khi trung tâm HPC của trường đại học của tôi cài đặt này, tôi nghĩ rằng nó là quá mức cần thiết. Sau đó, tôi phát hiện ra cách dễ dàng để thực hiện gỡ lỗi rất phức tạp. Đó thực sự là một chương trình tuyệt vời.
Yann

Tôi tổng quan thứ hai quá. Tôi đã sử dụng nó trong nhiều trường hợp và nó cực kỳ mạnh mẽ, mặc dù rất đắt ...
BlaB


1

Tôi tự hỏi tại sao không ai nhắc đến Padb (Trình gỡ lỗi ứng dụng song song) là phần mềm mở và phần mềm miễn phí như OP thích, nhưng không mạnh như các đối tác thương mại, ví dụ: TotalView cho HPC


-1

Đây là bản tóm tắt một số câu trả lời được đưa ra cho tôi trước đây:

OpenMP có chức năng định thời: omp_get_wtime()omp_get_wtick()- tài liệu trực tuyến

Google có một hồ sơ CPU

Scalasca thực hiện hồ sơ và phân tích OpenMP và MPI

Sau đó, có Tauvtune mà tôi chưa sử dụng.

Chúc may mắn!


Tôi không nghĩ câu hỏi là về thời gian, nhưng tôi có thể sai. Mặc dù vậy, những gợi ý hay ...
Yann

Câu trả lời này là về hồ sơ hơn là gỡ lỗi ...
mbq

Tôi đã thấy rằng các công cụ định hình tạo ra sự thay thế tốt cho các trình gỡ lỗi song song. Tôi thường thấy rằng các lỗi song song có liên quan đến các vấn đề về hiệu năng, chẳng hạn như logjam trong MPI. Công cụ hiệu suất thường sẽ tiết lộ điều này. Trình lược tả bộ nhớ của TAU rất tốt để tìm ra lý do tại sao các sai lệch ngẫu nhiên có thể xảy ra.
Jeff
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.