Hiệu quả của việc sử dụng petc4py so với c / c ++ / fortran


11

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:


11

Đâ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, petsc4pylà 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ểunumpygiao 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 petsc4pythâ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 petsc4pykho 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.f90thư 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.


Tôi cũng có một mối quan tâm tương tự với một mã không có cấu trúc nhỏ. PETSc chỉ cung cấp các cấu trúc dữ liệu và bộ giải nhưng tôi vẫn phải đọc trong lưới (tối đa 4GB tệp đầu vào), phân vùng, tạo ánh xạ, lặp qua các phần tử, tính toán ma trận độ cứng cục bộ (phần tử), v.v. trước khi PETSc có thể lắp ráp và giải quyết . Sẽ không python chậm hơn đối với công cụ không liên quan đến PETSc này, đặc biệt là I / O, ánh xạ và tính toán mức độ phần tử. Bởi vì phần còn lại của mã là đơn giản.
stali

Các tính toán mức phần tử thường được truyền vào dưới dạng kernel (xem App.f90nguồ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?
Aron Ahmadia

Bạn đúng rồi. Tôi có ý tưởng nhưng trong trường hợp cụ thể của tôi có nhiều hạt nhân như vậy (các hàm hình dạng cho các loại phần tử khác nhau, tính toán mức phần tử, ánh xạ, v.v.) chiếm khoảng 90% mã. Tôi đã nhìn vào Fenics một thời gian trước và rất nhiều chi tiết như xử lý các mắt lưới bên ngoài và BC áp đặt, v.v ... không rõ ràng ngay từ cái nhìn đầu tiên hoặc có vẻ phức tạp hơn (ít nhất là với tôi). Ngoài ra, tôi sử dụng Fortran khá đơn giản để sử dụng (được cung cấp tài liệu PETSc tuyệt vời) cho những người không CS như tôi. Tôi thực sự tìm thấy nó dễ dàng hơn python :) cho công việc của tôi.
stali

7

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!

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.