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

Serialize chỉ là copy byte? Text chậm hơn 52 lần

Serialize chỉ là copy dữ liệu ra byte nên nhanh? Đo ra: binary memcpy đúng là gần như chỉ sao chép (0,48 ns/bản ghi, ~38 GB/s), nhưng ghi ra text từng trường chậm hơn 52 lần và parse chậm hơn 29 lần vì phải format/parse mỗi số. Còn binary memcpy nhanh thì lại không di động: endianness, padding, con trỏ đều vô nghĩa qua máy khác.

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

Thêm phép tính vào vòng lặp mà không chậm hơn: vì sao?

Vòng lặp duyệt mảng lớn nhanh chậm do số phép tính? Đo trên host ARM bằng STREAM: copy (không phép tính), add, triad (nhân+cộng) đều đạt ~65-92 GB/s như nhau — nút cổ chai là băng thông bộ nhớ, không phải phép tính. Và một luồng đã đạt ~85% đỉnh, hai luồng bão hòa ~95 GB/s: trên lõi Apple này một core gần như dùng hết băng thông, khác hẳn server x86.

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

Cùng một mảng, chạm cách này nhanh hơn cách kia 424 lần

Truy cập bộ nhớ có một tốc độ cố định? Đo trên host ARM cùng một mảng 256MB, cùng số lần chạm: duyệt tuần tự tốn 0,24 ns mỗi phần tử (33 GB/s), nhưng đuổi con trỏ ngẫu nhiên tốn 101,7 ns — chênh 424 lần. Và ngẫu nhiên độc lập (nhờ song song mức bộ nhớ) chỉ 3,3 ns, nhanh 31 lần đuổi con trỏ. Ba trần khác nhau, chọn bởi cách bạn truy cập.

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

Mỗi luồng một biến riêng mà vẫn chậm gấp 2,6 lần?

Mỗi luồng ghi biến riêng của nó thì chạy song song thoải mái? Đo trên host ARM: tám luồng, mỗi luồng tăng một bộ đếm riêng, nhưng nếu tám bộ đếm nằm chung một dòng cache thì chậm gấp 2,6 lần so với khi mỗi bộ đếm được đệm ra dòng riêng — dù các biến hoàn toàn độc lập về logic. Đây là false sharing: dòng cache ping-pong giữa các lõi. Ghi thường không atomic vẫn trả giá.

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

Atomic đắt gấp mấy lần? Từ 6,5 tới 74, tùy đông người

Phép atomic có một chi phí cố định, đắt hơn lệnh thường mấy lần? Đo trên host ARM: một luồng, atomic tốn 1,59 ns so với lệnh thường 0,24 ns — gấp 6,5 lần. Nhưng tám luồng cùng đập vào một atomic thì mỗi phép ngốn 18 ns — gấp 74 lần. Còn atomic riêng mỗi luồng (đệm ra dòng cache riêng) chỉ 0,25 ns, scale gần hoàn hảo. Cái đắt là tranh chấp, không phải bản thân atomic.

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

Lệnh không nhánh có luôn thắng if? Còn tùy đồng xu

Lệnh chọn không nhánh (cmov/csel) luôn tốt hơn một if? Đo trên host ARM, quét theo xác suất điều kiện đúng: chi phí của nhánh là một đường cong hình chuông — gần như miễn phí khi điều kiện luôn đúng hoặc luôn sai (dễ đoán), nhưng đỉnh 0,58 ns khi 50/50 (khó đoán nhất). Còn branchless thì phẳng lì ~0,37 ns. Hai đường giao nhau quanh 15% và 85% — và đó mới là chỗ quyết định.