Q

Quản trị viên

Là một lập trình viên yêu công nghệ, thích viết blog để chia sẻ kiến thức, kinh nghiệm lập trình và những điều thú vị trong thế giới tech.

2300 bài viết · Website
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

Căn lề dữ liệu đã lỗi thời? Một cú SIGBUS nói không

Căn lề là chuyện cũ, CPU nay đọc lệch thoải mái? Đo trên host ARM: đọc lệch mà vẫn nằm trong một dòng cache thì nhanh y hệt căn lề — hoàn toàn miễn phí. Nhưng bắc cầu hai dòng cache thì tốn: L1 chậm thêm 33%, RAM chậm gấp 2,2 lần vì phải nạp hai dòng. Và một atomic vắt qua ranh giới dòng thì không chậm — nó Bus Error, chương trình chết ngay.

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

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 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 8 phút

Đổi chỗ hai dòng for, code chạy chậm đi 18 lần

Duyệt ma trận theo hàng hay theo cột — cùng số phần tử, cùng phép cộng, chỉ khác thứ tự — thì như nhau chứ? Đo trên host ARM: ma trận 64MB duyệt theo hàng 0,211 ns mỗi phần tử, theo cột 3,79 ns — chậm gần 18 lần. Mỗi lần chạm cột rơi vào một dòng cache riêng, CPU nạp 128 byte nhưng chỉ dùng 4, phí 31/32 dòng và cộng cả lỗi TLB. Thứ quyết định không phải số phần tử, mà số byte dòng cache phải kéo.