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,17
ví 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 đó.