Làm thế nào để cập nhật bộ đệm sâu hoạt động trong GPU?


10

Ngay bây giờ tôi đang cố gắng thực hiện một số loại bộ đệm chuyên sâu trong phần mềm và tôi gặp một vấn đề lớn khi tôi viết thư cho nó. Có một mutex là quá mức tuyệt đối. Vì vậy, tôi đã tạo ra một số lượng mutexes bằng số lượng chủ đề. Tôi đang khóa một mutex dựa trên pixel hiện tại (pixel_index% mutexes_number) và điều này hoạt động tốt hơn, nhưng vẫn rất rất chậm. Và tôi tự hỏi làm thế nào nó được thực hiện trong một GPU thực sự? Có một thuật toán thông minh hoặc phần cứng xử lý nó?

Câu trả lời:


9

Phần cứng chuyên dụng cao xử lý nó. Chiến lược điển hình là sử dụng GPU để rasterization và lưu trữ thông tin độ sâu ở các định dạng nén (ví dụ: phương trình z khi đa giác hoàn toàn bao phủ một ô). Điều này cho phép thử nghiệm trên toàn bộ một lát; các thủ thuật CTNH khác bao gồm kiểm tra độ sâu trước khi trình tạo bóng pixel được chạy (giả sử điều kiện cho phép - trình tạo bóng không thể ghi giá trị độ sâu). Bạn có thể xem xét một cái gì đó tương tự trong phần mềm, chẳng hạn như mỗi luồng "sở hữu" một tập hợp các ô và đi từng bước độc lập nguyên thủy hoặc bắt chước các chiến lược đa gpu như khung thay thế hoặc các đường raster thay thế.


11

Trong một GPU thực, thay vì có nhiều lõi cố gắng đọc / ghi cùng một vùng của bộ đệm độ sâu và cố gắng đồng bộ hóa giữa chúng, bộ đệm độ sâu được chia thành các ô (như 16 × 16 hoặc 32 × 32) và mỗi lõi gạch được gán cho một lõi đơn. Lõi đó sau đó chịu trách nhiệm cho tất cả quá trình rasterization trong ô đó: bất kỳ hình tam giác nào chạm vào ô đó sẽ được rasterized (trong ô đó) bởi lõi sở hữu. Sau đó, không có sự can thiệp giữa các lõi và không cần chúng phải đồng bộ hóa khi truy cập vào bộ phận của bộ đệm khung.

Điều này ngụ ý rằng các hình tam giác chạm vào nhiều ô sẽ cần được rasterized bởi nhiều lõi. Vì vậy, có một bước phân phối lại công việc giữa xử lý hình học (các thao tác trên các đỉnh và hình tam giác) và xử lý pixel.

Trong giai đoạn hình học, mỗi lõi có thể xử lý một khối nguyên thủy đầu vào; sau đó với mỗi nguyên thủy, nó có thể nhanh chóng xác định gạch nào chạm vào nguyên thủy (cái này được gọi là "rasterization thô") và thêm nguyên thủy vào hàng đợi cho mỗi lõi sở hữu một trong các gạch bị ảnh hưởng.

Sau đó, trong giai đoạn pixel, mỗi lõi có thể đọc danh sách các nguyên thủy trong hàng đợi của nó, tính toán độ bao phủ pixel cho các ô mà lõi sở hữu và tiến hành kiểm tra độ sâu, đổ bóng pixel và cập nhật bộ đệm khung, không cần phối hợp thêm với các lõi khác.

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.