1 điểm bởi GN⁺ 2023-07-07 | 1 bình luận | Chia sẻ qua WhatsApp
  • Bài viết khám phá các cơ hội tối ưu hóa cho một vòng lặp trong mã C do Clang tạo ra.
  • Vòng lặp tăng hoặc giảm một số dựa trên các ký tự trong chuỗi.
  • Tác giả sắp xếp lại vòng lặp để tối ưu cho các ký tự 'p' và 's' thay vì ký tự kết thúc null.
  • Tác giả loại bỏ các nhánh điều kiện bằng cách sử dụng số học và lệnh di chuyển có điều kiện.
  • Mã đã tối ưu đạt được mức cải thiện tốc độ đáng kể 6,73 lần so với mã gốc.
  • Tác giả cũng thử các kỹ thuật tối ưu hóa khác nhưng nhận thấy chúng làm mã chậm đi.
  • Thiết lập benchmark bao gồm CPU AMD Ryzen 5 5625U cùng các phiên bản mới nhất của Clang và GCC.
  • Kết luận là việc viết tay và tối ưu ở mức assembly có thể mang lại cải thiện hiệu năng đáng kể trong một số trường hợp cụ thể.

1 bình luận

 
GN⁺ 2023-07-07
Ý kiến trên Hacker News
  • Mã gốc có thể được tối ưu bằng cách dùng câu lệnh if thay cho switch.
  • Một phiên bản tối ưu hóa khác của mã dùng các lệnh không phân nhánh sete/cmov và có thể đạt tốc độ tương đương với mã assembly đã được tối ưu hóa.
  • Phiên bản mã được vector hóa có thể còn nhanh hơn nếu có thể sử dụng các lệnh AVX-512.
  • Các bộ xử lý khác có thể có đặc tính hiệu năng khác nhau tùy theo nhánh.
  • Ngôn ngữ C ban đầu được thiết kế để mã ở cấp độ hệ thống có thể dễ dàng được chuyển dịch giữa các nền tảng, và vì mục tiêu đó đã phải đánh đổi một số tính năng.