Cho mình hỏi về performance khi sử dụng bitwise operator vs arithmetic. Thông thường theo mình hiểu nếu như cần nhân hay chia, thay vì sử dụng * hay /, mình shift bit left hoặc right thì sẽ tối ưu hơn cho performance. Gần như các post mình tìm được trên mạng đều đồng ý với cái đó và cái này thầy mình cũng từng nói. Hôm qua khi ngồi tán dóc với một ông kì cựu trong ngành phát triển game thì ổng nói cái đó không đúng. Mình dẫn chứng bằng tấm hình dưới đây (note từ lớp học) thì ổng nói nó sai.
Mình về google lại thì thấy cái này. https://www.quora.com/Why-are-bitwise-operations-slow-and-CPU-inefficient
Đại khái thì nếu dùng bitwise operator trong trường hợp so sánh Logical, chương trình chạy chậm hơn.
Thấy nó cũng đúng nhưng nếu xét nhân/chia thì bitwise vẫn nhanh hơn. Mình nhớ không lầm thì lúc học Hệ thống, nếu optimize 1 hay 2 gì đó trong C thì compiler sẽ chuyển/nhân chia ra bitwise thay vì vẫn để nhân chia khi không được optimize. Mình có xem hợp ngữ trước và sau optimize thì hợp ngữ viết như vậy.
Kiến thức của mình có bị hổng chổ nào không? Mình có nghe nói về cycle count nhưng không rành lắm. Có trường hợp nào mà arithmetic outperforms bitwise không?
mình dùng thì thấy dịch cho x64 ngoài
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?