Giải thuật 03/09/2026 8 phút

Cùng phép nhân, khi 3,2 chu kỳ khi 0,4: sao lại thế?

Mỗi lệnh CPU có một chi phí cố định? Đo trên host ARM: cùng một phép nhân tốn 3,2 chu kỳ khi nằm trong chuỗi phụ thuộc, nhưng chỉ 0,4 chu kỳ khi các phép độc lập — chênh 8 lần. Mỗi lệnh có HAI con số: độ trễ và thông lượng. Bất ngờ hơn: cả phép chia số thực cũng chồng được ~8 lần, dù tôi tưởng bộ chia làm từng cái một.

Giải thuật 03/09/2026 8 phút

Lõi CPU tám cổng ngồi chơi 474/475 thời gian: vì sao?

Lõi CPU rộng 8 thì cái gì cũng nhanh? Đo trên host ARM: một chuỗi phép phụ thuộc — mỗi phép chờ kết quả phép trước — chạy đúng tốc độ độ trễ, và cái lõi tám cổng ấy hoàn toàn vô dụng. Độ trễ mỗi phép chênh nhau khủng khiếp: cộng 1 chu kỳ, nhân 3, chia 7,5, nạp từ RAM theo con trỏ tới 475 chu kỳ. Đường tới hạn là trần cứng không lõi nào phá được.

Giải thuật 03/09/2026 9 phút

Atomic 'lock-free' vẫn chậm 27 lần khi đông luồng — và không hề nhanh hơn mutex

Tưởng atomic là lock-free nên luôn rẻ, và luôn nhanh hơn mutex? Tôi đo: fetch_add trên một atomic chung 1,6ns khi một luồng nhưng 44ns khi tám luồng — đắt theo số luồng vì cùng nảy một dòng cache; CAS-loop tệ nhất (119ns); còn per-thread nhanh 96 lần. Lock-free nói về ngữ nghĩa, không về chi phí.

Giải thuật 03/09/2026 8 phút

100 cú chạm RAM mà chỉ tốn bằng 4 cú: phép màu MLP

Mỗi lần chạm hụt cache phải chờ xong mới tới lần sau, nên N lần miss tốn N lần độ trễ? Đo trên host ARM: đuổi một con trỏ ngẫu nhiên tốn 102 ns mỗi bước, nhưng đuổi 32 con trỏ độc lập song song chỉ còn 3,9 ns mỗi bước — nhanh 26 lần. Lõi thực thi ngoài thứ tự cho hàng chục lần chạm hụt bay cùng lúc. Cùng là truy cập RAM ngẫu nhiên, phụ thuộc hay độc lập chênh nhau 26 lần.

Giải thuật 03/09/2026 8 phút

Cùng tổng O(n), một cách nhanh gấp 24 lần: lời kết sê-ri

Kết sê-ri 45 phần bằng một phép đo gói trọn luận điểm: cùng 10 triệu số nguyên, cùng phép tính tổng O(n), nhưng mảng liền mạch chạy 0,225 ns mỗi phần tử còn mảng con trỏ rải rác 5,48 ns — chênh 24 lần chỉ vì cache và con trỏ, thứ mà Big-O hoàn toàn giấu. Bài học cả sê-ri: đừng đoán, hãy đo — và đo cho đúng.

Giải thuật 03/09/2026 8 phút

Đọc 1 byte, CPU nạp cả 128: cái giá của đọc thưa

Đọc một byte thì chỉ tốn một byte băng thông? Đo ra: CPU nạp cả một dòng cache mỗi lần chạm bộ nhớ, nên đọc thưa (mỗi phần tử một dòng) chậm gấp 10 lần đọc liền. Và ngưỡng bão hòa lộ kích thước dòng thật của máy: host ARM này (Apple Silicon) dùng dòng 128 byte, không phải 64 byte như x86 quen thuộc.