Thời gian thực hiện tính toán của PIC32
Mình dùng MPLAB C32 viết chuơng trình thử PIC32,
Dùng vòng lập thử tính hàm atan2(x,y) 10000 lần, lấy đồng hồ bấm giây đo thời gian thực hiện. kết quả cho thấy nó mất 11 giây để thực hiện ==>một hàm atan2 phải mất 1.1 ms để thực hiện Giả sử PIC chạy 72 MHz, suy ra 1 chu kì là 1/72Mhz (s) ==> 1.1ms thực hiện đuợc 1.1 ms / (1/72Mhz) chu kì kết quả là 79200 chu kì Có nghĩa là vi xử lí thực hiện một lệnh atan2 mất 79200 chu kì máy, kết quả này có vẻ không hợp lí lắm Mình muốn hỏi cách thực hiện dịch tối ưu lệnh trên MPLAB C 32 và cách cấu hình để PIC chạy ở tốc độ nhanh nhất Cảm ơn |
Lâu rồi tôi quên mất post này. Hôm nay xem lại, tôi đã thử nghiệm với MPLAB C32 v1.02 và C32 v1.04.
Với MPLAB C32 v1.02 SE, tôi chỉ dùng được hàm atan2() với đối số và kết quả là các số double. Số chu kỳ cần thiết khi thực thi hàm vào khoảng 6000 - 8000 chu kỳ máy (mô phỏng bằng MPLAB SIM). Với MPLAB C32 v1.04 còn đang trong giai đoạn evaluation, tôi có thể dùng các hàm atan2() và atan2f() (atan2f() có đối số và kết quả là các số float). Số chu kỳ cần thiết khi thực thi hàm atan2() là vào khoảng 700 - 900 chu kỳ máy, còn hàm atan2f() mất khoảng hơn 200 chu kỳ máy (cũng mô phỏng bằng MPLAB SIM). Chú ý sự cải thiện rất đáng kể của thư viện đi kèm v1.04! Do đó, để đạt được tốc độ tính toán cao với các PIC32, nên dùng phiên bản mới nhất của trình biên dịch MPLAB C32. Thân, |
6 Attachment(s)
Hôm nay em mới có dịp quay lại bài này.
Hôm qua em lôi cái mạch Pic32 Starter Kit ra thử có vài thắc mắc, Đoạn code mà em thử như sau (copy từ trên microchip forum và vài chỗ khác) Em dùng MPLAB 8.36, C32 V1.05 , Optimize level -O3 Code:
#include <p32xxxx.h> Code:
int InitTime = ReadTimer45(); Kết quả quang sát các giá trị như sau Code:
TMR4 TMR5 chỉ thực hiện 3 lệnh gán mà có vẽ như Timer45 (32 bit) đã tăng từ 0x9C41_0455 đến 0xFFFF_FFFF để tràn rồi đếm tiếp đến 0x2939_162D, sơ sỡ đã thấy nhiều hơn 0X6000_0000 chu kì, con số này lớn lắm, khoảng 1.5 tỉ lận !!!! Có cái gì đó không hợp lí, mong các bạn và anh Nam chỉ giúp Mình up kèm mấy cái hình khi chạy Còn dưới đây là file De-ASM của đoạn code mình thử Code:
|
Khi bạn dùng step over, timer có thể không bị freeze, do đó, khi CPU dừng thì timer vẫn chạy. Trong thời gian debugger cập nhật dữ liệu, thì timer đã thay đổi rất nhiều!
Thực chất bạn đang muốn kiểm tra điều gì? |
Mình muốn kiểmm tra số chu kì máy thực hiện cho từng dòng lệnh.
Nếu muốn làm vậy, ngoài cách dùng Timer còn có cách nào không? |
Để kiểm tra số chu kỳ máy đối với 1 đoạn chương trình, cách đơn giản nhất là dùng MPLAB SIM, và kiểm tra bằng stopwatch
Tuy nhiên với PIC32 thì phương pháp này không hoàn toàn chính xác vì có Flash wait state đối với các lệnh rẽ nhánh. CPU có thể phải chờ flash khi gặp các lệnh gọi hàm, lệnh nhảy. Nếu bạn muốn tính thời gian thực thi 1 lệnh có thể viết 1 đoạn assembly để bật tắt 1 chân IO, rồi dùng oscilloscope để kiểm tra chu kỳ của tín hiệu ra. Chú ý: nếu dùng phương pháp bật tắt IO bạn phải sử dụng các thanh ghi dùng riêng để set và clear bit. |
PIC32 có thời gian xử lý toán rất nhanh. Các bạn cứ yên tâm như vậy, vì tôi đã làm thiết bị liên quan đến vấn đề này rồi. http://www.youtube.com/watch?v=GetUORbRX-U
|
Rất nhanh nhưng cũng có giới hạn chứ, mình chỉ muốn biết nó nhanh cỡ nào và có đáng để đổi từ dsPIC sang PIC32 không chẳng hạn. Nếu mình vọc chơi thì cần gì nhanh chậm gì cả, mình muốn nghiên cứu cụ thể, vậy thì phải có thống kê ...thống kê thì cần có số liệu ....
Mình muốn đến cuối cùng nhìn một đoạn chương trình C của PIC32 có thể tính phỏng đoán được nó thực hiện mất bao nhiêu giây |
Múi giờ GMT. Hiện tại là 02:47 PM. |
Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam