Test thư viện ma trận tự viết và thư viện CMSIS

Posted by on February 13, 2021 · 3 mins read
STM32   Embedded

Test thư viện ma trận tự viết và thư viện CMSIS

Câu trả lời dĩ nhiên là xài thư viện rồi :3, tuy nhiên làm sao? và hiệu quả của thư viện ma trận ra sao so với khi tự code

Thí nghiệm này thực hiện với thư viện arm_math, nằm trong bộ thư viện CMSIS của ARM, mình sẽ so sánh với thư viện ma trận do mình viết, platform là STM32F405RGT6.

Setup thí nghiệm như sau:

image.png

Bật FPU (chú ý là FPU single persicion)

image.png

Optimizer O3:

image.png

Để setup arm math cho ma trận, chúng ta cần tải thư viện CMSIS DSP tại:https://github.com/ARM-software/CMSIS/blob/master/CMSIS/Include/arm_math.h

Tutorial: https://www.vidisonic.com/enable-arm-math-and-cmsis-driver-library-in-sw4stm-integrated-development-environment/

Sau đó setup như sau với CubeIDE:

image.png

image.png

Chú ý copy file arm_math vào project và thêm #define ARM_MATH_CMx (x tùy core ARM) vào đầu file main.c

image.png

Thư viện arm math và thư viện ma trận nhà làm

Để thực hiện test này, mình thực hiện phép nghịch đảo ma trận cho một ma trận 6*6:

Thư viện arm math tạo đối tượng ma trận, sau đó ta phải tham chiếu mảng data 1 chiều lưu dữ liệu, các phép tính cũng thực hiện tham chiếu.

image.png

image.png

Phép nghịch đảo của arm math dùng phương pháp Gauss: https://en.wikipedia.org/wiki/Gaussian_elimination

Thư viện tự tạo của mình sử dụng phương pháp tính dựa trên định nghĩa:

image.png

Tuy nhiên do STM32F405 chỉ có FPU single persicion nên mình có 2 phiên bản là dùng float và double.

KẾT QUẢ:

Với setup timer như trên, 1 counter sẽ tương đương 1us, sau đây là kết quả:

Với thư viện arm math:

image.png

Với thư viện nhà làm bản double:

image.png

Với thư viện nhà làm bản float:

image.png

Nhận xét: Thư viện arm math chỉ tốn tầm 22us để thực hiện phép nghịch đảo ma trận 6*6, trong khi 2 thư viện kia có gì đó lạ lạ :)) double nhanh hơn float. Chính vì thế mình test lại với timer set up như sau

image.png

Với setup này, 1 counter timer kéo dài 100us

Kết quả bổ sung:

Với thư viện arm math:

image.png

Với thư viện nhà làm bản double:

image.png

Với thư viện nhà làm bản float:

image.png

Như vậy có thể thấy thư viện nhà làm quá là tệ :))) bản float tốn cỡ 0.13s để tính nghịch đảo xong, trong khi bản double tận 0.2s.

Written on February 13, 2021