Làm thế nào tôi có thể cấu hình tốc độ của các shader đỉnh và mảnh của tôi một cách riêng biệt?


11

Tôi muốn biết làm thế nào tôi có thể kiểm tra xem liệu đỉnh của tôi hoặc shader mảnh của tôi là một nút cổ chai trong đường ống kết xuất của tôi.

Tôi đã đọc về việc sử dụng glQueryCountervới GL_TIMESTAMPmục tiêu để nhận điểm kiểm tra đồng hồ giữa các lệnh OpenGL, nhưng chúng không phân biệt giữa các loại trình tạo bóng khác nhau.

Ví dụ: nếu một khung hình trên GPU mất 8 ms để hiển thị, tôi có thể nói rằng trình tạo bóng đỉnh mất 7 ms và trình tạo bóng mảnh đã mất 1 ms không?

Câu trả lời:


12

Vertex và shader mảnh chạy đồng thời, không tuần tự và GPU tự động cân bằng tải giữa chúng, do đó không thể gán thời gian cụ thể như 7 ms cho một và 1 ms cho nhau.

Tuy nhiên, bạn có thể thực hiện một thử nghiệm đơn giản để đo vị trí nút cổ chai: đặt ma trận chiếu xem thành tất cả các số không cho tất cả các lệnh gọi rút thăm của bạn. Điều này làm cho tất cả các đỉnh đầu ra bằng 0 cho vị trí của chúng và làm cho tất cả các tam giác suy biến; do đó, nó ngắn mạch tất cả rasterization và shading mảnh, trong khi giữ cho tất cả các shader đỉnh hoạt động (trình biên dịch shader không thể tối ưu hóa bất cứ điều gì, vì nó không biết ma trận sẽ được đặt thành 0 khi chạy).

Khi bạn đo hiệu suất với các ma trận bằng 0, bạn sẽ thấy lượng thời gian cần thiết để chỉ chạy các shader đỉnh, mà không có bất kỳ công việc rasterization hoặc phân mảnh đồng thời nào trong GPU. Sau đó, bạn có thể so sánh điều này với lượng thời gian cần thiết để kết xuất thông thường cho mỗi lần vượt qua. Nếu hai lần tương tự nhau, thì đường chuyền có thể bị ràng buộc nhiều đỉnh; nếu kết xuất ma trận zeroed nhanh hơn đáng kể, thì đó có thể là giới hạn pixel. Cũng có thể nhận được kết quả trung gian, chỉ ra rằng công việc được chia đều giữa hai bên.

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.