2013-02-12 24 views
5

Tại sao chúng ta cần bộ nhớ liên kết cho SSE/AVX?Mối quan hệ giữa vector hóa SSE và Căn chỉnh bộ nhớ

Một trong những câu trả lời tôi thường nhận được là tải bộ nhớ phù hợp nhanh hơn nhiều so với tải bộ nhớ chưa được ký. Sau đó, tại sao tải bộ nhớ liên kết này nhanh hơn nhiều so với tải bộ nhớ chưa được ký?

Trả lời

9

Điều này không chỉ dành riêng cho SSE (hoặc thậm chí x86). Trên hầu hết các kiến ​​trúc tải và lưu trữ cần phải được liên kết tự nhiên nếu không, (a) tạo ra một ngoại lệ hoặc (b) cần hai hoặc nhiều chu kỳ cộng với một số sửa chữa để xử lý tải/lưu trữ không đúng cách. Trên x86 (b) là đúng đối với kiểu dữ liệu < 16 byte nhưng (a) là đúng đối với các kiểu dữ liệu SSE trừ khi bạn sử dụng rõ ràng các phiên bản không chính xác của hướng dẫn tải/lưu trữ có thể xử lý dữ liệu lệch.

Bạn có thể thắc mắc: tại sao không chỉ sử dụng các phiên bản không chính xác của các hướng dẫn tải/lưu trữ SSE này bất kể căn chỉnh? Câu trả lời là các lệnh này thường chậm hơn nhiều so với các đối tác liên kết của chúng vì chúng thường hoạt động theo (b) ở trên, làm cho chúng chậm hơn gấp 2 lần hoặc chậm hơn, ngoài các CPU Intel gần đây như Core i7, nơi hình phạt nhỏ hơn nhiều , nhưng không đáng kể.

+2

Và hãy nhớ rằng ngay cả trên các lõi hiện đại, nơi truy cập không đúng cách thường nhanh, truy cập qua trang vẫn còn khá chậm. Nếu bộ đệm của bạn đủ lớn và không được căn lề, nó sẽ chứa các giao diện trang. –

+1

Đúng và vượt qua ranh giới dòng bộ nhớ cache do tải không đúng có thể dẫn đến dấu chân bộ nhớ cache lớn hơn cũng có thể có tác động tiêu cực đến hiệu suất. –

+1

Trang cắt ngang thậm chí còn tồi tệ hơn ... – Mysticial

Các vấn đề liên quan