Hai luồng, một lõi: nguyên lý hoạt động của đa luồng đồng thời
Bối cảnh và động lực
- Lý do đưa SMT vào sử dụng: Được đưa vào để nâng cao mức độ tận dụng tài nguyên của bộ xử lý. Bộ xử lý có hàng trăm thanh ghi, nhiều đơn vị nạp/lưu trữ và đơn vị số học. Để tận dụng chúng tốt hơn, người ta dùng kỹ thuật song song ở mức lệnh (ILP).
- Pipeline lệnh: Chia việc thực thi lệnh thành nhiều giai đoạn để ở mỗi chu kỳ có thể xử lý bổ sung một lệnh mới. Pipeline càng sâu thì càng có thể xử lý song song nhiều lệnh hơn.
- Kiến trúc siêu vô hướng: Có thể phát hành nhiều lệnh trong mỗi chu kỳ. Ví dụ, các bộ xử lý Intel Core i7 hiện đại có thể phát hành 4 lệnh trong mỗi chu kỳ.
- Lãng phí theo chiều ngang và chiều dọc: Là sự lãng phí tài nguyên xảy ra khi không thể tìm đủ các lệnh độc lập. Lãng phí theo chiều ngang xảy ra khi bộ xử lý không tìm được đủ lệnh độc lập, còn lãng phí theo chiều dọc xảy ra khi mọi lệnh đều phụ thuộc vào lệnh đang được thực thi.
Cách Intel triển khai SMT trên bộ xử lý
- Nhân đôi trạng thái kiến trúc: Nhân đôi trạng thái kiến trúc của bộ xử lý để chạy đồng thời hai luồng. Nhờ vậy, một bộ xử lý vật lý sẽ xuất hiện với hệ điều hành như hai bộ xử lý logic.
- Chia sẻ và nhân đôi tài nguyên: Một số tài nguyên được nhân đôi, một số khác được chia sẻ. Việc có nhân đôi hay không được quyết định dựa trên nhiều yếu tố như mức tiêu thụ điện năng và diện tích thực tế trên chip.
Vi kiến trúc bộ xử lý
- Frontend, backend và retirement unit: Vi kiến trúc bộ xử lý được chia thành ba phần. Frontend lấy và giải mã lệnh, backend phân bổ tài nguyên thực thi và chạy lệnh. Retirement unit theo dõi các lệnh đã thực thi và commit kết quả của chúng vào trạng thái kiến trúc.
Chi tiết triển khai SMT
- Frontend: Gồm nhiều thành phần như con trỏ lệnh, trace cache, bộ nhớ đệm ITLB, hàng đợi uop, v.v. Mỗi thành phần được nhân đôi hoặc chia sẻ để hỗ trợ hai bộ xử lý logic.
- Backend: Gồm bộ phân bổ tài nguyên, đổi tên thanh ghi, hàng đợi sẵn sàng lệnh, bộ lập lịch lệnh, v.v. Bộ phân bổ tài nguyên sẽ luân phiên giữa các bộ xử lý logic ở mỗi chu kỳ.
- Retirement unit: Theo dõi khi các lệnh đã sẵn sàng để commit vào trạng thái kiến trúc và commit chúng theo đúng thứ tự.
Hệ thống con bộ nhớ
- TLB: Bộ nhớ đệm nhỏ dùng để chuyển đổi địa chỉ ảo sang địa chỉ vật lý. Nó được chia sẻ động giữa hai bộ xử lý logic.
- Bộ nhớ đệm L1, L2, L3: Mỗi lõi CPU có bộ nhớ đệm L1 riêng. Bộ nhớ đệm L2 có thể khác nhau tùy vi kiến trúc, còn bộ nhớ đệm L3 được chia sẻ giữa các lõi.
Tác động hiệu năng của SMT
- Chạy đơn luồng: Khi chạy một luồng đơn trên lõi có bật SMT, hiệu năng có thể giảm do tài nguyên bị chia sẻ.
- Chạy hai luồng: Hiệu năng có thể thay đổi tùy theo mẫu truy cập bộ nhớ đệm. Các luồng mang tính hợp tác có thể cải thiện hiệu năng, nhưng các luồng cạnh tranh có thể làm giảm hiệu năng.
- Lỗ hổng bảo mật: Trong những năm gần đây, nhiều vấn đề bảo mật liên quan đến SMT đã được phát hiện. Do việc chia sẻ tài nguyên và thực thi suy đoán của lệnh, dữ liệu nhạy cảm có thể bị rò rỉ.
Kết luận
- Quyết định có dùng SMT hay không: SMT được thiết kế để nâng cao mức độ tận dụng tài nguyên CPU và tăng thông lượng xử lý lệnh, nhưng đi kèm các đánh đổi về hiệu năng và bảo mật. Cần quyết định có dùng SMT hay không dựa trên từng workload.
Tóm tắt của GN⁺
- Hiểu về SMT: SMT được thiết kế để nâng cao mức độ tận dụng tài nguyên CPU và tăng thông lượng xử lý lệnh.
- Hiệu năng và bảo mật: SMT có thể giúp cải thiện hiệu năng, nhưng cạnh tranh tài nguyên và các lỗ hổng bảo mật cũng có thể gây suy giảm hiệu năng và phát sinh vấn đề an toàn.
- Quyết định sử dụng: Cần cân nhắc cẩn thận việc có dùng SMT hay không tùy theo workload. Nếu cần hiệu năng cao, việc tắt SMT có thể là lựa chọn tốt.
- Các dự án liên quan: Cũng đáng tham khảo dự án về cách AMD triển khai SMT và các dự án phân tích hiệu năng SMT trên bộ xử lý ARM.
Chưa có bình luận nào.