- Dự án lịch Advent kéo dài 25 ngày với chủ đề tối ưu hóa trình biên dịch C/C++
- Từ ngày 1 đến 25 tháng 12, mỗi ngày giới thiệu một trường hợp tối ưu hóa qua bài blog và video
- Mỗi bài viết đều trình bày cụ thể thời điểm áp dụng, phân tích assembly, và các tình huống không áp dụng
- Dù tập trung vào x86-64, nội dung cũng bao gồm một phần về kiến trúc ARM 64-bit và 32-bit
- Đây là chuỗi nội dung có giá trị giáo dục cao dành cho các nhà phát triển muốn tìm hiểu nguyên lý hoạt động của trình biên dịch
Tổng quan dự án Advent of Compiler Optimisations 2025
- Đây là dự án được chuẩn bị trong khoảng 1 năm, công bố một trường hợp tối ưu hóa trình biên dịch mới mỗi ngày trong suốt tháng 12
- Từ ngày 1 đến 25 tháng 12, mỗi ngày đăng một bài blog và một video
- Mỗi nội dung dựa trên mã C hoặc C++ để phân tích những tối ưu hóa thú vị mà trình biên dịch thực hiện
- Mỗi kỹ thuật tối ưu hóa đều được giải thích chi tiết đến mức bao gồm điều kiện áp dụng, diễn giải mã assembly, và các trường hợp không được áp dụng
- Không chỉ là so sánh mã đơn thuần, mà là cách tiếp cận phân tích hoạt động thực tế của trình biên dịch
Phạm vi kỹ thuật được đề cập
- Bao quát rộng từ các mẹo theo kiến trúc cấp thấp đến các kỹ thuật tối ưu hóa cấp cao
- Chủ yếu nói về x86-64, nhưng cũng có một phần nội dung liên quan đến ARM 64-bit và 32-bit
- Nội dung được xây dựng như tài liệu thực tiễn giúp học về hoạt động nội bộ của trình biên dịch và quá trình sinh mã
Cách tham gia và theo dõi
- Có thể theo dõi toàn bộ bài viết qua thẻ AoCO2025 trên blog
- Có thể xem video qua kênh YouTube hoặc playlist riêng
Ý nghĩa của dự án
- Đây là một dự án cá nhân quy mô lớn được hoàn thành sau khoảng 1 năm chuẩn bị, nhằm khám phá sự tinh vi và hiệu quả của trình biên dịch
- Một nỗ lực mang tính giáo dục để giúp các nhà phát triển hiểu cơ chế hoạt động thực tế của tối ưu hóa trình biên dịch và vận dụng điều đó khi viết mã
- Tác giả muốn chia sẻ “niềm vui khi học về việc trình biên dịch đáng kinh ngạc đến mức nào”
Giới thiệu Matt Godbolt
- Nhà phát triển C++ sống tại Chicago, làm việc tại Hudson River Trading
- Đồng dẫn podcast Two’s Complement
- Hoạt động trên Mastodon và Bluesky
- Nội dung blog được phát hành theo giấy phép Creative Commons BY-NC 3.0 Unported
1 bình luận
Ý kiến trên Hacker News
Sau khi xem qua các tối ưu hóa trình biên dịch của Matt, bạn cũng nên xem buổi phỏng vấn mà tôi đã thực hiện với anh ấy
Điều tôi tin là thế này: hãy làm việc ở mức độ trừu tượng mà bạn thấy thoải mái, nhưng cũng cần hiểu lớp bên dưới nó
Ví dụ, nếu là lập trình viên C thì bạn nên biết runtime của C tương tác với hệ điều hành như thế nào. Không cần biết mọi chi tiết, nhưng ít nhất phải có cảm giác nên bắt đầu nhìn từ đâu khi có vấn đề xảy ra
Bài ACM Queue do Matt viết cũng là một bài nhập môn rất hay để hiểu các khái niệm tối ưu hóa kiểu này, dù là bài đã cũ
Ví dụ, khi làm việc với Java, việc hiểu JVM đã giúp tôi tối ưu hiệu năng cho phần mềm y tế tốt hơn rất nhiều. Và đơn giản là hiểu lớp bên dưới cũng rất thú vị
Dù rõ ràng là một chuyên gia đầu ngành, anh ấy vẫn gây ấn tượng khi không lao ngay vào tập lệnh x86 phức tạp từ đầu mà giải thích từng phần cơ bản một cách tuần tự
Matt Godbolt thực sự là một viên ngọc quý của cộng đồng C và C++
Tôi nghĩ Compiler Explorer và những đóng góp của anh ấy đã khiến thế giới của rất nhiều lập trình viên trở nên tốt đẹp hơn
Tôi đang xem Advent of Computer Science Advent Calendars, Day 2
Tôi rất quan tâm đến kỹ thuật amalgamation mà SQLite sử dụng
Theo đội ngũ SQLite, chỉ riêng cách này cũng mang lại mức tăng hiệu năng 5~10%. Tôi hy vọng Matt sẽ đề cập chủ đề này trong buổi nói chuyện
Tham khảo: wiki về Unity build
Dù vậy, LTO có thể chậm đối với các bản build không tăng dần, nên unity build vẫn hữu ích cho những lần build một lần duy nhất
Tôi đã làm phát triển phần mềm 25 năm rồi nhưng vẫn tự hỏi liệu mình có đang dùng các cờ trình biên dịch tối ưu hay không
Trong đa số trường hợp,
-O2là đủ. Mỗi khi trình biên dịch được cập nhật, các tối ưu hóa nội bộ cũng được cải thiện, nên lập trình viên hiếm khi cần tự tinh chỉnh chi tiếtNgoài ra, việc thêm cờ dựa trên benchmark sai còn khá nguy hiểm. Chênh lệch hiệu năng 1~2% là chuyện rất bình thường tùy theo trạng thái hệ thống
Cấu trúc mã thay đổi cũng có thể làm thay đổi tính thân thiện với cache và từ đó ảnh hưởng hiệu năng. Nói cách khác, có thể không phải nhờ cờ mà là nhờ cách bố trí mã
Tôi rất mong chờ các bài còn lại. Sáng nay tôi vừa thử dạy SBCL tối ưu các mẫu
(+ base (* index scale))và(+ base (ash index n))thành một lệnh LEA duy nhất. Coi như áp dụng ngay những gì học được từ Day 2Nội dung của Godbolt thì bao nhiêu cũng không đủ
Tôi muốn họ nói về phép chia cho hằng số nguyên. Chương tương ứng trong Hacker’s Delight thực sự rất xuất sắc, nhưng với độc giả phổ thông thì có phần hơi khó
Giống như Advent of Code dành cho dân mê trình biên dịch
Tôi rất thích định dạng xây dựng trực giác qua những bài học tối ưu hóa nhỏ gọn mỗi ngày
Khi hiểu trình biên dịch làm gì, và vì sao thì bạn sẽ trở thành một lập trình viên tốt hơn, bất kể dùng ngôn ngữ nào