Cách khiến một lệnh CPU chạy mất tới 62 giây

Cách khiến một lệnh CPU chạy mất tới 62 giây

Hầu hết lập trình viên benchmark code để nó chạy nhanh hơn; repo này làm điều ngược lại.

Một dự án mã nguồn mở mới mang tên Assembly Hall of Shame đang thu thập những đoạn mã assembly x86 chậm một cách kỳ quặc nhất. Được tạo bởi lập trình viên xoreaxeaxeax, repo này ra luật rất nghiêm ngặt để xem một lệnh CPU có thể "ngốn" tối đa bao nhiêu chu kỳ trên phần cứng nguyên bản (stock). Kỷ lục hiện tại thuộc về fxrstor64 — một lệnh khôi phục trạng thái 512-byte trên chip AMD Ryzen 7 5800H. Nó ngốn tới 198 tỷ chu kỳ, mất trọn vẹn 62 giây chỉ để chạy xong.

Vì sao lại đáng chú ý: CPU hiện đại xử lý hàng tỷ lệnh mỗi giây. Việc ép một nhân CPU "đứng hình" hơn một phút cho thấy những bẫy hiệu năng kỳ lạ ẩn sâu bên trong memory-mapped IO và bus hệ thống.

Cách làm của kỷ lục gia này đại loại như sau: CPU 0 tìm cách tải trạng thái từ một vùng phần cứng có độ trễ cực cao, trong khi dàn nhân còn lại liên tục nã dữ liệu vào bus để gây nghẽn, buộc lệnh ban đầu phải nằm chờ dài cổ trong hàng đợi.

Hôm nay nếu thấy code của bạn chạy chậm, ít nhất nó cũng chưa đến mức mất cả phút chỉ để xong đúng một lệnh.

Nguồn