Kiểu dữ liệu Fixed-Point là một công cụ mạnh mẽ, nhưng nếu không được quản lý cẩn thận, nó có thể trở thành nguồn gây lãng phí tài nguyên lớn nhất.
a. Vấn đề của Bit Growth Tự động
Theo mặc định, để đảm bảo không mất dữ liệu và không bị tràn số, LabVIEW sẽ tự động tăng độ rộng bit của kết quả sau mỗi phép toán. Ví dụ, nhân hai số 16-bit sẽ tạo ra kết quả 32-bit. Nếu bạn tiếp tục thực hiện một chuỗi các phép toán, độ rộng bit có thể tăng lên 48-bit, 64-bit hoặc hơn một cách nhanh chóng. Điều này được gọi là “bit growth” và nó làm cạn kiệt tài nguyên một cách thầm lặng.
b. Giải pháp: Cấu hình Đầu ra Thủ công
Giải pháp là bạn, với tư cách là nhà thiết kế, phải nắm quyền kiểm soát. Thay vì để LabVIEW tự quyết định, hãy nhấp chuột phải vào đầu ra của mỗi hàm toán học và cấu hình thủ công kiểu dữ liệu đầu ra. Điều này đòi hỏi bạn phải hiểu rõ dải giá trị và độ chính xác cần thiết ở mỗi bước.
Khi cấu hình thủ công, bạn phải quyết định hai điều quan trọng:
- Chế độ Xử lý Tràn số (Overflow Mode):
- Saturate (Bão hòa): Nếu kết quả vượt quá giới hạn, nó sẽ được gán bằng giá trị lớn nhất/nhỏ nhất. An toàn về mặt toán học nhưng tốn thêm tài nguyên cho logic so sánh.
- Wrap (Quay vòng): Các bit cao nhất sẽ bị cắt bỏ. Hiệu quả nhất về tài nguyên (gần như miễn phí) nhưng có thể gây ra lỗi lớn nếu tràn số thực sự xảy ra. Hãy sử dụng khi bạn chắc chắn kết quả nằm trong dải cho phép.
- Chế độ Làm tròn (Rounding Mode):
- Truncate (Cắt cụt): Các bit thấp nhất bị loại bỏ. Hiệu quả nhất về tài nguyên (miễn phí) nhưng có thể gây ra thiên vị số (bias).
- Các chế độ khác (Round half-even, Round half-up): Chính xác hơn về mặt toán học nhưng tốn thêm tài nguyên cho logic làm tròn.
Trong thiết kế hiệu suất cao, sự kết hợp **Wrap** và **Truncate** thường được ưu tiên để đạt được hiệu suất và tài nguyên tốt nhất, với điều kiện là bạn đã phân tích và đảm bảo rằng việc tràn số và mất độ chính xác là chấp nhận được.