Benchmark các ngôn ngữ trên Pi

12 Tháng Năm, 2017 by in category Tutorial with 0 and 2
Home > Raspberry Pi > Tutorial > Benchmark các ngôn ngữ trên Pi

18448062_10207792214237958_1289580733_n

Bài viết này mình sẽ làm một thí nghiệm, Benchmark  các ngôn ngữ trên Pi. Thí nghiệm này không mang tính so sánh mạnh yếu gì cả vì mỗi ngôn ngữ có một thế mạnh riêng và phục vụ những mục đích khác nhau.

Bài viết chỉ nêu ra các định mức cụ thể mà các ngôn ngữ có thể đạt được trên GPIO của Pi để mọi người tham khảo hoặc đưa ra quyết định phù hợp về việc lựa chọn ngôn ngữ cho ứng dụng timing của mình. Chẳng hạn dùng Perl để điều chế xung có tần số 500kHz liệu có khả thi ?

Việc chúng ta sẽ làm đó là viết một chương trình với vòng lặp vô tận cho GPIO lên mức 1 và xuống mức 0 liên tục, không có thời gian nghỉ. Chúng ta sẽ đo dạng sóng và từ tần số thu được rút ra tương quan tốc độ thực thi của các ngôn ngữ.

Shell 

Bắt đầu với Shell của Linux. Điều khiển GPIO của Pi với Shell thì không cần cài đặt gì cả vì chúng ta chỉ cần ghi vào các file IO trong hệ điều hành Raspbian.

Kết quả thu được là khoảng 13kHz.

shell

Python RPi.GPIO

Với Python, chúng ta sẽ test 2 thư viện. Đầu tiên là RPi.GPIO

Kết quả tốt hơn nhiều so với Shell: 333kHz.

rpigpio

Python gpiozero 

Thư viện thứ 2 mà chúng ta dùng cho Python là gpiozero:

Thư viện này sẽ cho kết quả chậm hơn RPi.GPIO: 40kHz.

gpiozero

(lưu ý: ở các lần test mình zoom dạng sóng với các tỉ lệ khác nhau nên các bạn có thể không thấy tương quan dạng sóng khác nhau nhiều, thực tế với tần số chênh lệnh gần 300kHz thì nếu để cùng tỉ lệ, RPi.GPIO cho ra dạng sóng dầy đặc hơn gpiozero rất nhiều).

Ruby

Với Ruby thì chúng ta sẽ dùng thư viện PiPiper để điều khiển GPIO.

Kết quả rất hạn chế 7.6kHz, thấp hơn cả Shell

ruby
C

Với C ta sử dụng thư viện cho chip xử lý BCM2835 của Pi.

Kết quả cao hơn khá nhiều so với các đối thủ ở trên 1Mhz

C

Perl

Cuối cùng sẽ là Perl cũng bằng thư viện BCM2835.

Kết quả cũng ngang ngửa Python RPi.GPIO: 250kHz

perl

Kết

Như kết quả của thí nghiệm này, với các ứng dụng cần sự timing, Shell và Ruby có vẻ không phù hợp cho lắm. Python hay Perl chấp nhận được với các ứng dụng có tốc độ không quá cao. C thỏa mãn những ứng dụng có tốc độ cao hơn nhưng vẫn chưa thể dùng cho các ứng dụng Realtime khi được thực thi thông qua  hệ điều hành Raspbian.

Raspbian là hệ điều hành mục đích chung nên sẽ xử lý rất nhiều các tác vụ đồng  thời chứ không chỉ thực thi mỗi chương trình điều khiển GPIO của bạn bởi vậy để có thể phục vụ được nhu cầu Realtime, thường chúng ta nên xử dụng thêm một vi điều khiển để hỗ trợ và kết hợp với Raspberry Pi hoặc là cài đặt một Realtime-OS cho Raspberry Pi để xử lý. Vấn đề này chúng ta sẽ bàn tới ở bài tiếp theo.

Add comment

 

creative common license

Nội dung của RasPi.vn được chia sẻ với các điều khoản có trong

Giấy phép Creative Commons Ghi nhận công của tác giả – Phi thương mại 4.0 Quốc tế .

Bạn có toàn quyền được chia sẻ nội dung bài viết của RasPi Việt Nam với điều kiện ghi rõ nguồn.
Bạn không được sử dụng nội dung bài viết của RasPi Việt Nam cho mục đích thương mại.