Top Ad unit 728 × 90

Latest news

recent

Vấn đề tối ưu với C

Trong quá trình triển khai ứng dụng surveillance cho smart camera tôi đã rất nhiều lần phải tối ưu thuật giải và mã lập trình. Quá trình từng bước để triển khai một thuật toán cho Smart camera cũng như các thiết bị nhúng nói chung được minh họa một cách rất rỏ ràng trong sơ đồ dưới đây.


Tiến trình này đòi hỏi những kiến thức phức tạp về kiến trúc, nguyên tắc xử lý, luồng dữ liệu của DSP, hệ thống nhúng, vì vậy trong phạm vi bài viết này tôi chỉ list ra một vài nguyên tắc nho nhỏ được sử dụng trong Phase 1 khi tối ưu mã C như sau:
  • Sử dụng kiểu dữ liệu với Size thích hợp (nhớ rằng int: 4 byte có sự khác biệt so với short 2 byte).
  • Sử dụng int và unsigned int cho biến đếm của vòng lặp.
  • Biến đếm của vòng lặp nên thực hiện đếm lùi với điều kiện dừng là giới hạn dưới.
  • Cố gắng giảm số lần gọi hàm (Function Call).
  • Tinh giản các cấu trúc điều kiện tránh lồng ghép quá nhiều cấp.
  • Sử dụng Constant cho các con trỏ là tham số của các hàm.
  • Sử dụng int thay cho char và short trong trường hợp biến cục bộ.
  • Sử dụng biến cục bộ như là biến tạm cho các biến global.
  • Cố gắng dùng toán tử shift nếu có thể.
  • Tránh vấn đề Aliasing - các con trỏ cùng chỉ đến một địa chỉ.
  • Tối thiểu các vòng lặp như có thể (Loop Unroll).
  • Hợp các vòng lặp (fusion) riêng rẻ thành 1 để tăng khả năng pipeline và giảm thời gian truy xuất bộ nhớ.
  • Tùy theo cấu trúc của dữ liệu trong bộ nhớ mà có thứ tự duyệt mảng thích hợp để đảm bảo khoảng cách di chuyển con trỏ là tối ưu (minimize step width). 
Theo ý của cá nhân tôi khi đã làm qua hầu như các ngôn ngữ thông dụng, những lưu ý trên có thể áp dụng rất hữu ích cho các ngôn ngữ khác chứ không riêng gì C.


Binh Nguyen - Bioz
Vấn đề tối ưu với C Reviewed by Bioz Nguyen on 5:30:00 PM Rating: 5
All Rights Reserved by IEEV © 2009 - 2016
Powered By Blogger, Designed by Sweetheme

Contact Form

Name

Email *

Message *

Powered by Blogger.