Tôi đang cố gắng kẹp một giá trị giữa -127 và 127 trên Cortex-M dựa trên microcontroller.C Đây có phải là hack không nhánh thực sự nhanh hơn không?
Tôi có hai chức năng cạnh tranh, một sử dụng điều kiện khác sử dụng hack không nhánh tôi tìm thấy here.
// Using conditional statements
int clamp(int val) { return ((val > 127) ? 127 : (val < -127) ? -127 : val); }
// Using branchless hacks
int clamp(int val) {
val -= -127;
val &= (~val) >> 31;
val += -127;
val -= 127;
val &= val >> 31;
val += 127;
return val;
}
Bây giờ tôi biết rằng trong một số trường hợp một trong những phương pháp này có thể là nhanh hơn so với người kia, và ngược lại nhưng nhìn chung là nó có giá trị nó để sử dụng kỹ thuật không cành thấy như nó không thực sự quan trọng với tôi mà tôi sử dụng, cả hai đều sẽ làm việc tốt trong trường hợp của tôi?
Một nền tảng nhỏ trên vi điều khiển, đó là một vi điều khiển dựa trên ARM chạy ở 90 MIPS với đường ống 3 giai đoạn, tìm nạp, giải mã và thực thi và dường như có một số loại dự báo chi nhánh nhưng tôi không thể khai thác chi tiết.
Bạn đã đánh giá nó? –
Có vẻ như tối ưu hóa bị tắt khi mã được biên dịch. –
Bạn quan tâm đến hiệu suất trên ARM, nhưng bạn đang xem ASM được tạo cho x86. Điều đó sẽ không đưa bạn đến đâu cả. – hobbs