1 điểm bởi GN⁺ 2024-07-28 | 1 bình luận | Chia sẻ qua WhatsApp

Bộ dự đoán nhánh 2-Ahead của Zen 5: cách một ý tưởng 30 năm tuổi mở ra những thủ thuật mới

  • Giới thiệu

    • Kiến trúc Zen 5 của AMD là một bản tái thiết kế hoàn toàn so với các kiến trúc Zen trước đó
    • Một trong những thay đổi quan trọng nhất là bộ dự đoán nhánh 2-Ahead mới
    • Ý tưởng này bắt nguồn từ một bài báo cách đây 30 năm
  • Tầm quan trọng của bộ dự đoán nhánh

    • Máy tính lưu chương trình trong bộ nhớ và thực thi chúng
    • Bộ xử lý được chia thành phần đầu lấy và thực thi lệnh, và phần sau
    • Các lệnh nhảy có điều kiện là thách thức lớn trong việc lấp đầy pipeline
    • Dự đoán sai buộc pipeline phải bị flush và khởi động lại
    • Vì vậy, bộ xử lý phải dự đoán chuỗi lệnh của chương trình chính xác nhất có thể
  • Sự xuất hiện của bộ dự đoán nhánh 2-Ahead

    • Đây là ý tưởng đã được đề xuất từ đầu những năm 1990
    • Sau đó, các phương pháp hiệu quả hơn như bộ dự đoán TAGE đã được phát triển
    • Tuy nhiên, để cải thiện hiệu năng đơn nhân, bộ dự đoán nhánh 2-Ahead đang được chú ý trở lại
  • Lợi thế của kiến trúc x86

    • x86 thu được lợi ích lớn hơn từ dự đoán nhánh 2-Ahead so với các ISA khác có lệnh độ dài cố định
    • x86 đòi hỏi xử lý phức tạp hơn để xác định ranh giới lệnh
    • Zen 5 sử dụng hai pipeline fetch 32 byte và cụm giải mã 4-wide
  • Triển khai theo bài báo của Seznec

    • Bài báo của Seznec mô tả cách triển khai bộ dự đoán nhánh 2-Ahead
    • Zen 5 tuân theo các khuyến nghị trong bài báo này
    • Nó sử dụng hai pipeline fetch 32 byte và op cache dual-port 6-wide
    • L1 BTB và L2 BTB được dùng để tăng độ chính xác dự đoán
  • Kết luận

    • Bộ dự đoán nhánh 2-Ahead của Zen 5 là một thay đổi quan trọng trong kiến trúc Zen
    • Bộ dự đoán mới này sẽ là nền tảng hữu ích cho sự phát triển các lõi Zen trong tương lai

Tổng hợp của GN⁺

  • Bộ dự đoán nhánh 2-Ahead của Zen 5 là một cách diễn giải hiện đại cho ý tưởng từ 30 năm trước
  • Công nghệ này cải thiện hiệu năng bằng cách nâng cao độ chính xác dự đoán lệnh của bộ xử lý
  • Nó đặc biệt hữu ích trong việc xử lý độ phức tạp của kiến trúc x86
  • Bài viết này hữu ích với những người quan tâm đến kiến trúc CPU và tối ưu hiệu năng
  • Một dự án khác có tính năng tương tự là kiến trúc Golden Cove của Intel

1 bình luận

 
GN⁺ 2024-07-28
Bình luận trên Hacker News
  • Có phần giải thích rất hay về branch prediction
  • Hiệu năng SMT có vẻ sẽ rất thú vị; Zen5c cung cấp 192 Core hoặc 384 vCPU. Ở Zen 6c có thể kỳ vọng 256 Core. Có khả năng đạt 512 Core và 1024 vCPU trên máy chủ Dual Socket 1U
    • Có thể giải quyết bài toán scale web app của năm 2014 chỉ bằng một máy chủ, miễn là xử lý được vấn đề làm mát
    • 1 RPS trên mỗi vCPU thì có thể đạt 1000 RPS, không tính cache hit
    • Ngay cả trang chủ HN cũng không vượt quá 1000 lượt xem trang mỗi giây
  • Thật thú vị khi những bài báo khoa học từ hàng chục năm trước trở thành "tối tân" nhờ tiến bộ phần cứng
    • Ví dụ: Z-buffer, được dùng trong game video 3D
    • Khi lần đầu được công bố trong bài báo, nó không phải chủ đề chính vì yêu cầu bộ nhớ quá lớn
    • Vài chục năm sau, khi megabyte trở nên rẻ, mọi trình kết xuất 3D thời gian thực đều bắt đầu dùng nó
  • Bộ dự đoán suy đoán dễ bị tổn thương trước nhiều kiểu tấn công làm rò rỉ dữ liệu cá nhân. Nhiều ISA phổ biến đều dễ bị ảnh hưởng; tôi muốn biết liệu họ có đang thực hiện biện pháp nào để giảm tác động của các cuộc tấn công này không
  • Với tư cách là người mới trong lĩnh vực này, tôi vẫn chưa rõ 2-ahead branch predictor là gì
  • Có vẻ cần nhiều branch hints hơn
    • Cold, warm, warmer, mặc định bỏ qua hot? Tôi tự hỏi liệu việc đặt tất cả nhánh là cold và chỉ trừ một nhánh ra có phải là ý tưởng tồi không
    • Khi có nhánh điều kiện, tại sao lại khó đến vậy để lấy trước và chuẩn bị cả hai nhánh có thể xảy ra rồi loại bỏ nhánh sai?
  • Cần nhiều băng thông bộ nhớ hơn; hai kênh bộ nhớ trên socket AM5 cho người dùng phổ thông là không đủ so với hiệu năng
    • Tôi đã chuyển sang M2 Max và thấy băng thông bộ nhớ được cải thiện đã tăng tốc công việc dữ liệu. Ngay cả khi đa nhiệm nặng, đường ống bộ nhớ hẹp của cấu hình Zen vẫn thường xuyên bị nghẽn
  • Trên Zen 5, khi kích hoạt hai luồng thì cụm giải mã và đường ống fetch đi kèm sẽ được chia tĩnh
    • Điều này có vẻ sẽ cải thiện đáng kể hiệu năng hyper-threading. Trên Zen1, HT cho mức tăng khoảng 25%. Tôi muốn biết có ai đã thử trên các mẫu mới hơn chưa
  • Tôi vẫn chưa hiểu 2-ahead branch predictor là gì