Petc4py vs c / c ++ / fortran chậm hơn bao nhiêu?
Tôi nhận ra nó sẽ phụ thuộc đáng kể vào mã được thực thi, nhưng còn một thứ đơn giản như sản phẩm vector ma trận thì sao?
Petc4py vs c / c ++ / fortran chậm hơn bao nhiêu?
Tôi nhận ra nó sẽ phụ thuộc đáng kể vào mã được thực thi, nhưng còn một thứ đơn giản như sản phẩm vector ma trận thì sao?
Câu trả lời:
Đây là một mối quan tâm rộng rãi trong cộng đồng lập trình khoa học và tôi sẽ coi sự không chắc chắn về hiệu suất là một trong những "huyền thoại" chính trong khoa học tính toán.
Như @fcruz thảo luận, petsc4py
là một trình bao bọc cho các thư viện PETSc, không phải là sự tái hiện của PETSc trong Python. Do đó, bạn có thể mong đợi bất kỳ hình phạt hiệu suất nào đến từ việc sao chép mảng đến và từ PETSc hoặc từ chi phí trong các cuộc gọi mã / chức năng trình điều khiển của bạn. petsc4py
được thực hiện rất cẩn thận, và miễn là bạn hiểunumpy
giao diện mảng đa chiều, bạn có thể tránh sao chép chi phí. Đối với phần lớn các trường hợp sử dụng mà tôi làm việc, hình phạt hiệu năng khi làm việc với Python là 10 - 40% và tôi thường đạt được đáng kể theo những cách khác ngoài việc bù đắp cho hiệu suất này. Trên thực tế, một số nhà phát triển Python HPC có kinh nghiệm hơn mà tôi đã nói với ý kiến rằng sự khác biệt hiệu năng này thường có thể giảm hơn nữa và khi Python đang lái các mã đắt tiền tính toán, điều này chắc chắn sẽ xảy ra.
Bản petsc4py
thân kho lưu trữ có một số ví dụ hữu ích để minh họa cho sự đánh đổi hiệu suất / tính linh hoạt. Tìm trong petsc4py
kho lưu trữ nguồn cho bản demo được gọi perftest
, nó giải quyết một hệ phương trình phi tuyến bằng cả trình điều khiển Python và trình điều khiển C (qua nhân Fortran được cung cấp trong App.f90
thư mục đó). Chi phí hoạt động ở đây là 10%.
Lấy ví dụ cụ thể, tôi là thành viên của một nhóm các nhà khoa học làm việc trên PyClaw , gói phần mềm giao tiếp với PETSc để quản lý lưới song song và hạt nhân Fortran kế thừa để giải quyết các vấn đề Riemann trên giao diện di động. Chúng tôi đã thực hiện một nghiên cứu khá cẩn thận về sự suy giảm hiệu suất khi chuyển đổi từ trình điều khiển Fortran và bạn có thể thấy kết quả ở cuối trang 5 trong Bảng 1 trong tài liệu hội nghị . Trong trường hợp của chúng tôi, chúng tôi đã trao đổi một chút hiệu năng trên lõi để có khả năng dễ dàng giao tiếp mã của chúng tôi với PETSc và Fortran và chạy song song hiệu quả trên hàng chục ngàn lõi.
App.f90
nguồn trong perftest
). Không có sự khác biệt về hiệu suất trong I / O. Bạn đã xem FEniCS cho gói cấp cao hơn chưa?
Petc4py chỉ là một cách khác để tích lũy PETSc nhưng từ python , hoặc tương tự như vậy, petc4py cung cấp các ràng buộc để từ python, bạn có thể truy cập các cấu trúc dữ liệu và thói quen của PETSc nhằm giảm nỗ lực phát triển các bộ giải PDE song song (thang đo đó).
PETSc cung cấp một số mức độ trừu tượng cho người giải quyết của họ và thậm chí bạn có thể sử dụng PETSc để thực hiện trình giải của riêng mình. Ở mức độ trừu tượng hóa phần mềm thấp nhất, PETSc sử dụng BLAS, LAPACK và MPI, và tốt nhất là nó sẽ nhanh như việc triển khai các phần mềm này.
Bây giờ, pet4py sử dụng cython để thực hiện các ràng buộc với PETSc. Chi phí sử dụng cython liên quan đến số lượng tính toán sẽ được thực hiện từ PETSc. Nếu bạn sử dụng các bộ giải PDE cấp cao từ PETSc, các chi phí phải đủ nhỏ để bạn không cần phải lo lắng về chúng.
Một câu hỏi có thể quan trọng hơn so với hiệu suất so sánh giữa PETSc và GEMV là nếu PETSc là công cụ phù hợp cho công việc của bạn. Nếu bạn cần triển khai các bộ giải PDE song song không tầm thường, thì rất có thể, PETSc sẽ thực sự giúp bạn. Tuy nhiên, nếu bạn cần thực hiện một loạt GEMV, bạn muốn có một thư viện BLAS. Chúc may mắn!