2009-09-30 31 views
5

Tôi đang xem xét việc triển khai bộ điều khiển logic mờ dựa trên thư viện PyFuzzy (Python) hoặc FFLL (C++).Hiệu suất của Python đáng giá?

Tôi thích làm việc với python hơn nhưng không chắc liệu hiệu năng có được chấp nhận trong môi trường nhúng hay không.

Mối quan tâm chính là thời gian phản hồi càng nhanh càng tốt (tốc độ cập nhật 5 h + sẽ là lý tưởng> 2Hz là bắt buộc). Hệ thống sẽ đọc từ nhiều (có thể là 5) cảm biến từ một cổng RS232 và cung cấp 2/3 kết quả đầu ra dựa trên kết quả đánh giá mờ.

Tôi có nên lo ngại rằng Python sẽ quá chậm cho tác vụ này không?

+5

Tôi đề xuất thử nghiệm với một mẫu thử nghiệm đơn giản trên nền tảng cụ thể của bạn. –

+0

5 Hz không chính xác thời gian phản hồi nhanh nếu bạn cần bất kỳ sự tương tác nào với thiết bị. –

Trả lời

35

Nói chung, bạn không nên bị ám ảnh về hiệu suất cho đến khi bạn thực sự thấy nó trở thành một vấn đề. Vì chúng tôi không biết chi tiết về ứng dụng của bạn, chúng tôi không thể nói nó hoạt động như thế nào nếu được triển khai bằng Python. Và kể từ khi bạn đã không thực hiện nó được nêu ra, không phải bạn có thể.

Triển khai phiên bản bạn cảm thấy thoải mái nhất và có thể triển khai nhanh nhất, trước tiên. Sau đó, chuẩn nó. Và nếu nó là quá chậm, bạn có ba tùy chọn mà nên được thực hiện theo thứ tự:

  • Thứ nhất, tối ưu hóa mã Python của bạn
  • Nếu đó là không đủ, hãy viết các chức năng hoạt động quan trọng nhất trong C/C++ và gọi từ mã Python của bạn
  • Và cuối cùng, nếu bạn thực sự cần hiệu suất cao nhất, bạn có thể phải viết lại toàn bộ nội dung trong C++. Nhưng sau đó ít nhất bạn sẽ có một nguyên mẫu làm việc trong Python, và bạn sẽ có một ý tưởng rõ ràng hơn về cách nó nên được thực hiện. Bạn sẽ biết những gì cạm bẫy để tránh, và bạn sẽ có một thực hiện đã được chính xác để kiểm tra và so sánh kết quả với.
+14

+1 tối ưu hóa sớm là gốc rễ của mọi điều ác. –

+4

Nó là gốc rễ của tất cả các điều ác, và nó tràn ngập tất cả. – FogleBird

+1

Đồng ý với jalf trên tất cả các điểm. Ngoài ra, nếu nhiều công việc sẽ được thực hiện thông qua các cuộc gọi thư viện, nó không quan trọng rất nhiều cho dù bạn gọi thư viện từ C hoặc từ Python. Nếu bạn sử dụng các tính năng ngôn ngữ được xây dựng sẵn của Python và các mô-đun thư viện C, bạn thậm chí có thể không bao giờ nhận thấy một lần truy cập hiệu năng cho Python; nếu bạn cố gắng để viết FFT của riêng bạn trong Python bản địa hoặc một cái gì đó như thế, bạn sẽ thấy hiệu suất khủng khiếp. Sử dụng Python để viết các phần thực sự cao cấp và cố gắng để cho các thư viện Python và C thực hiện việc nâng hạng nặng. – steveha

11

Python rất chậm trong việc xử lý lượng lớn dữ liệu không phải chuỗi. Đối với một số hoạt động, bạn có thể thấy rằng nó chậm hơn 1000 lần so với C/C++, vì vậy có, bạn nên điều tra điều này và làm các tiêu chuẩn cần thiết trước khi bạn thực hiện các thuật toán quan trọng về thời gian trong Python.

Tuy nhiên, bạn có thể mở rộng python với các mô-đun trong mã C/C++, để những thứ quan trọng về thời gian nhanh, trong khi vẫn có thể sử dụng mã python cho mã chính.

+4

+1 Tôi cũng sẽ, như là một dòng cơ bản, cố gắng viết nó trong python và thay thế các phần chậm với C nếu cần thiết. –

5

Làm cho nó hoạt động, sau đó làm cho nó hoạt động nhanh.

+1

Đừng quên bước giữa, "Làm cho nó hoạt động chính xác." – JasCav

+0

Tôi đặt "làm cho nó hoạt động chính xác" trong định nghĩa của tôi về thực hiện. Nhưng tôi nghe bạn. – KevDog

1

Nếu phần lớn thời gian chạy của bạn được chi tiêu trong thư viện C, ngôn ngữ bạn sử dụng để gọi các thư viện này không quan trọng. Thư viện ăn uống của bạn được viết bằng ngôn ngữ nào?

0

Từ mô tả của bạn, tốc độ không phải là một mối quan tâm (và bạn có thể sử dụng C, cython, bất cứ điều gì bạn muốn làm cho nó nhanh hơn), nhưng bộ nhớ sẽ được. Đối với các môi trường có tối đa 64 Mb (ở đó hệ điều hành và tất cả đều phải phù hợp, phải không?), Tôi nghĩ có khả năng python có thể không phải là công cụ thích hợp để triển khai đích.

Nếu bạn có logic không tầm thường để xử lý, tôi vẫn sẽ nguyên mẫu trong python, mặc dù.

0

Tôi chưa bao giờ thực sự đo hiệu suất của các ví dụ của pyfuzzy, nhưng vì phiên bản mới 0.1.0 có thể đọc các tệp FCL như FFLL. Chỉ cần mô tả hệ thống mờ của bạn ở định dạng này, viết một số trình bao bọc và kiểm tra hiệu suất của cả hai biến thể.

Để đọc FCL với pyfuzzy bạn cần thời gian chạy python antlr, nhưng sau khi đọc bạn sẽ có thể chọn đối tượng đọc, vì vậy bạn không cần phí antlr trên đích.