Nó cũng được biết rằng truy cập bộ nhớ trong một thời trang sải chân là tốt nhất cho hiệu suất.Tôi có nên sử dụng quyền truy cập bộ nhớ một lần để đọc hoặc viết không?
Trong tình huống mà
- Tôi phải truy cập vào một khu vực của bộ nhớ để đọc,
- Tôi phải truy cập vào khu vực khác để viết, và
- Tôi chỉ có thể truy cập vào một trong hai khu vực trong một sải chân một kiểu thời trang,
Tôi có nên đọc sải bước một hoặc viết sải chân không?
Một ví dụ đơn giản, cụ thể là thao tác sao chép và hoán vị giống như BLAS như y := P x
. Ma trận hoán vị P
được xác định hoàn toàn bởi một số vector hoán vị q(i)
. Nó có một vector hoán vị nghịch đảo tương ứng qinv(i)
. Người ta có thể mã các vòng lặp yêu cầu như y[qinv(i)] = x[i]
hoặc là y[i]=x[q(i)]
nơi trước đây đọc từ x
stride một và sau này viết để y
sải bước một.
Lý tưởng nhất có thể luôn mã hóa cả hai khả năng, cấu hình chúng trong điều kiện đại diện và chọn phiên bản nhanh hơn. Giả sử bạn chỉ có thể viết mã một phiên bản-- mẫu truy cập nào bạn sẽ luôn dự đoán sẽ nhanh hơn dựa trên hành vi của các kiến trúc bộ nhớ hiện đại? Làm việc trong môi trường luồng có thay đổi phản hồi của bạn không?
Không nổi tiếng bởi tôi. :-) Tôi không hiểu. Nếu bạn có thể đưa ra một ví dụ trong C có lẽ tôi có thể đưa ra một câu trả lời, nhưng trên OTOH bạn có thể không quan tâm đến một câu trả lời từ tôi nếu tôi không nhận được những gì BLAS là ... ;-) –
BLAS là Chương trình con số đại số tuyến tính cơ bản (http://netlib.org/blas/), một tập hợp các khối xây dựng số hiệu suất cao thường được các nhà cung cấp triển khai. –