Tôi đã phát triển mã C++ để tăng cường thực tế trên thiết bị ARM và tối ưu hóa mã là rất quan trọng để duy trì tốc độ khung hình tốt. Để tăng hiệu quả lên mức tối đa, tôi nghĩ rằng việc thu thập các mẹo chung là làm cho cuộc sống dễ dàng hơn đối với các trình biên dịch và giảm số lượng các phần tử của chương trình. Bất kỳ đề nghị được hoan nghênh.C++ Lời khuyên tối ưu hóa mã trên thiết bị ARM
1- Tránh hướng dẫn chi phí cao: chia, căn bậc hai, sin, cos
- Sử dụng những thay đổi hợp lý để chia hoặc nhân với 2.
- Multiply bằng nghịch đảo khi có thể.
2- Tối ưu hóa bên trong "cho" vòng: họ là một botleneck vì vậy chúng tôi nên tránh đưa ra nhiều tính toán bên trong, đặc biệt là các đơn vị, rễ vuông ..
3 Sử dụng nhìn lên bảng đối với một số chức năng toán học (sin, cos, ...)
ÍCH CÔNG cỤ
- objdump: lấy mã assembly của chương trình biên dịch. Điều này cho phép so sánh hai hàm và kiểm tra xem nó có thực sự được tối ưu hóa hay không.
** Cẩn thận **: ngày nay nút cổ chai là bộ nhớ thường xuyên hơn không (và do đó LUT không tuyệt vời như vậy ...). Nó có thể khác nhau trên ARM, phải thừa nhận, nhưng ... kiểm tra tốt hơn rằng đầu tư cho không có gì. –
Đúng. Nhưng trong các ứng dụng thời gian thực, thực hiện rất nhiều tính toán cho mỗi khung hình, hãy tin tôi rằng tối ưu hóa có thể tiết kiệm "một số khung hình mỗi giây". Nói "một số" là 8fps, như với trường hợp của tôi, đó là lý do tại sao tôi nghĩ câu hỏi này là quan trọng. –
Bạn có khả năng kiểm tra các số liệu khác nhau, như nhớ cache, truy cập bus bộ nhớ, v.v ... không? Điều này cũng rất hữu ích để biết nếu xe buýt mem của bạn là một nút cổ chai. BTW, off-topic, (donostia == San Sebastian)? Nếu vậy, tôi thực sự thích thành phố đó! – Brady