Texture Cache hoạt động như thế nào khi xem xét nhiều đơn vị đổ bóng


11

GPU hiện đại có nhiều đơn vị tạo bóng song song. Tôi muốn biết cách quản lý bộ đệm kết cấu trong kịch bản đó.

Câu trả lời:


14

Ở cấp độ cao nhất, GPU được chia thành một số lõi shader. Một GPU nhỏ trong máy tính xách tay hoặc máy tính bảng có thể chỉ có một vài lõi trong khi GPU máy tính để bàn cao cấp có thể có hàng tá.

Ngoài các lõi shader còn có các đơn vị kết cấu. Chúng có thể được nhóm lại với nhau bằng một đơn vị kết cấu trên mỗi lõi đổ bóng hoặc một đơn vị kết cấu được chia sẻ giữa hai hoặc ba lõi đổ bóng, tùy thuộc vào GPU.

Toàn bộ chip chia sẻ một bộ đệm L2 đơn, nhưng các đơn vị khác nhau sẽ có bộ đệm L1 riêng lẻ. Các đơn vị kết cấu có bộ đệm kết cấu và các đơn vị đổ bóng có bộ đệm cho hướng dẫn và hằng / đồng phục và có thể là bộ đệm riêng cho dữ liệu bộ đệm tùy thuộc vào việc tải bộ đệm có phải là đường dẫn riêng biệt từ tải kết cấu hay không (thay đổi theo kiến ​​trúc GPU).

Các đơn vị kết cấu hoạt động độc lập và không đồng bộ từ các lõi đổ bóng. Khi một shader thực hiện đọc kết cấu, nó sẽ gửi một yêu cầu đến đơn vị kết cấu trên một chiếc xe buýt nhỏ giữa chúng; Shader sau đó có thể tiếp tục thực thi nếu có thể, hoặc nó có thể bị treo và cho phép các luồng shader khác chạy trong khi nó chờ kết cấu đọc kết thúc.

Đơn vị kết cấu tạo ra một loạt các yêu cầu và thực hiện phép toán địa chỉ trên chúng. Chọn các mức mip và bất đẳng hướng, chuyển đổi UV thành tọa độ texel, áp dụng các chế độ kẹp / quấn, v.v. phân cấp bộ đệm, giống như cách bộ nhớ đọc hoạt động trên CPU (trước tiên hãy tìm trong L1, nếu không có L2 thì DRAM). Nếu nhiều yêu cầu kết cấu đang chờ xử lý đều muốn các texels giống nhau hoặc gần đó (như chúng thường làm), thì bạn sẽ nhận được rất nhiều hiệu quả ở đây, vì bạn có thể đáp ứng nhiều yêu cầu đang chờ xử lý chỉ với một vài giao dịch bộ nhớ. Tất cả các hoạt động này đều được sắp xếp theo đường ống, do đó, trong khi đơn vị kết cấu đang chờ bộ nhớ trên một lô, nó có thể thực hiện phép toán địa chỉ cho một lô yêu cầu khác, v.v.

Khi dữ liệu quay trở lại, đơn vị kết cấu sẽ giải mã các định dạng nén, thực hiện chuyển đổi và lọc sRGB khi cần thiết, sau đó trả kết quả trở lại lõi shader.


1
Cảm ơn! Điều đó thực sự hữu ích. Điều chỉnh các hằng / bộ đệm thống nhất. Có phải họ có bất kỳ lời khuyên nào ngoài độ chính xác (trung bình, mức thấp) mà tôi có thể sử dụng để cải thiện tỷ lệ nhấn bộ nhớ cache đồng phục không? Thứ tự mà tôi tuyên bố đồng phục có tạo ra sự khác biệt nào không (như để đóng gói chặt chẽ hơn)?
Felipe Lira

2
@PhilLira Đóng gói có thể tạo sự khác biệt, yeah. Trình biên dịch sẽ chèn phần đệm để ngăn các vectơ bị phân tách qua các ranh giới 16 byte, vì vậy hãy cố gắng tránh điều đó. Tôi không nghĩ trung bình / lowp thực sự làm bất cứ điều gì trên đồng phục, ít nhất là trên GPU máy tính để bàn (có thể nó làm trên thiết bị di động). Tôi sẽ không lo lắng quá nhiều về tỷ lệ nhấn bộ nhớ cache thống nhất mặc dù. Điều đó cực kỳ hiếm khi, nếu có, một nút cổ chai.
Nathan Reed
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.