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

Dự đoán nhánh: đoán được vs ngẫu nhiên

Ví dụ kinh điển: xử lý mảng đã sắp xếp nhanh hơn mảng ngẫu nhiên vì CPU đoán nhánh đúng hơn. Đo ra: đúng — nhưng chỉ khi có một nhánh THẬT (buộc tắt if-conversion), sắp xếp nhanh 2,2 lần. Ở -O2 mặc định, g++ tự bỏ nhánh (vector hóa/conditional-select) nên hiệu ứng biến mất hoàn toàn, và code không nhánh còn nhanh hơn cả bản sắp xếp. Đo thật.

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

Chi phí đoán sai nhánh

Đoán sai một nhánh chỉ chậm đi một chút? Đo ra: quét tỉ lệ nhánh được lấy từ 0% đến 100%, thời gian vẽ thành một hình chuông đỉnh ở 50% — nhánh đoán được (0% hoặc 100%) tốn 0,24–0,45 ns còn nhánh 50/50 tốn 2,38 ns. Từ đó suy ra phạt mỗi lần đoán sai ~3,86 ns, tức khoảng 12 chu kỳ CPU — đúng cỡ một lần xả pipeline. Đo thật.