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.

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

8 con trỏ, vài chục byte, mà chậm gấp 4 lần: conflict miss

Dữ liệu nhỏ hơn cache thì luôn nằm trong cache? Đo ra: chỉ 8 con trỏ — vài chục byte dữ liệu thật — cũng chậm gấp 3-4 lần nếu chúng cách nhau đúng 64KB (lũy thừa 2), vì tất cả dồn vào cùng một tập cache và đá nhau ra (conflict miss). Cách nhau một số không lũy thừa 2 thì phẳng lì. Và ngưỡng conflict lộ luôn số way của cache.

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

Cùng lượng cache, trải mỏng ra 1024 trang chậm 15 lần

Chỉ cache mới quyết định tốc độ truy cập bộ nhớ? Đo ra: cùng ~128KB dòng cache chạm y hệt nhau, nhưng dữ liệu trải rộng trên 1024 trang chậm gấp 15 lần so với gói gọn trong ~16 trang — 14 ns so với 0,9 ns. Thủ phạm là TLB: bộ nhớ đệm dịch địa chỉ ảo sang vật lý. Trải nhiều trang hơn TLB chứa được thì mỗi truy cập trả thêm một lần đi bảng trang.

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

Hạ memory_order cho nhanh: mẹo x86 đem nhầm sang ARM

seq_cst đắt hơn relaxed nhiều, cứ hạ memory_order là code nhanh? Đo trên host ARM: relaxed và seq_cst chênh nhau đúng 0 ns — cả một luồng lẫn tám luồng — vì thứ tự nằm sẵn trong lệnh ldar/stlr/ldadd. Cái thật sự đắt là tính atomic (RMW gấp 7 lần ghi thường) và nhất là tranh chấp: tám luồng đập chung một atomic chậm gấp 60 lần tám ô riêng.

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

Một lệnh mỗi chu kỳ? Lõi này nuốt 7,5 lệnh

CPU chạy một lệnh mỗi chu kỳ, thời gian tỉ lệ số lệnh? Đo trên host ARM: một chuỗi phép cộng phụ thuộc chạy đúng 1 lệnh mỗi chu kỳ, nhưng cho lõi mười chuỗi độc lập thì nó nuốt tới ~7,5 phép cộng mỗi chu kỳ — cùng một lõi, cùng loại lệnh. Thêm việc độc lập gần như miễn phí cho tới khi lấp hết cổng thực thi, rồi bão hòa. IPC vượt xa 1.

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.