Tại sao đường ống lập trình (GLSL) nhanh hơn đường ống cố định?


27

Vì vậy, tôi đang tự học GLSL và đang cố gắng tìm hiểu tại sao nó lại nhanh hơn đường ống chức năng cố định.

Lý do tôi gặp vấn đề là từ sự hiểu biết của tôi, các shader bạn tạo ra đang thay thế các phần của đường ống đã có trước đó. Vì vậy, làm thế nào đơn giản là cung cấp phiên bản của riêng bạn tăng tốc mọi thứ?

Điều duy nhất tôi có thể nghĩ là nếu bạn đã cố gắng cung cấp phương trình chiếu sáng của riêng bạn trước đây, bạn sẽ phải thực hiện phép tính trên CPU, nhưng bây giờ bạn có thể thực hiện các phép tính trên GPU sẽ nhanh hơn.

Tôi có hiểu điều này một cách chính xác không?


Bạn đang hỏi liệu có nhanh hơn để tạo các phiên bản chức năng hiện có của riêng bạn không hoặc liệu có nhanh hơn để giảm tải các chức năng mà bạn đang tính toán trên CPU không?
MichaelHouse

Tôi đã tìm thấy một bài đăng trên gamedev.net trả lời câu hỏi của tôi.
Joey Green

2
Tôi hiểu rồi. Bạn nên đăng câu trả lời về nó ở đây, để những người khác có thể hưởng lợi. Có lẽ làm rõ câu hỏi của bạn trong quá trình.
MichaelHouse

@ joey-green xin vui lòng liên kết gamedev.net tại đây. Tôi sẽ rất hữu ích cho những người sẽ vấp phải câu hỏi này.
Quazi Irfan

1
Để gây nhầm lẫn nhiều vấn đề hơn, trong các thử nghiệm của tôi, đường ống cố định thực sự có thể nhanh hơn các shader, ít nhất là trong các trường hợp đơn giản; xem sol.gfxile.net/instANCE.html
Jari Komppa

Câu trả lời:


27

Các shader bạn tạo sẽ không phải là phiên bản của đường ống chức năng cố định (FFP) của riêng bạn, mà là một hoạt động thao tác đỉnh và pixel tùy chỉnh để đạt được điều gì đó thú vị và phức tạp.

Nhiều thứ bạn thực hiện thông qua đường ống lập trình (PP) sẽ hoạt động nhanh hơn so với triển khai FFP có thể có của chúng, bởi vì PP làm giảm số lượng đường chuyền hoặc số lượng ma thuật kết hợp và phép vẽ sơ đồ cần thiết để thể hiện những điều giả định này trong FFP.

Hãy tưởng tượng việc thực hiện một điều phổ biến như chiếu sáng theo pixel trong FFP chỉ với dữ liệu đỉnh được nội suy và kết cấu mẫu trong tay bạn. Thậm chí không thể làm điều đó một cách "trung thực", chỉ hack cho các trường hợp đặc biệt tùy thuộc vào hình khối được tính toán trước trung thành và một số pha trộn nghiêm trọng. Với PP, nó trở thành vấn đề tô màu cho sản phẩm chấm giữa hướng sáng và đỉnh bình thường.

Nói chung, PP biến chậm và không thể thành nhanh và có thể. Nhưng nếu bạn quyết định viết một shader để thực hiện các thuật toán tương tự được sử dụng trong FFP, bạn sẽ thấy rằng FFP sẽ nhanh hơn một chút vì nó được tối ưu hóa phần cứng.


1
Câu trả lời hay ... +1.
Amir Zadeh

@Green Không chắc về điều đó. Thiếu điểm nào đó. Câu trả lời của Kylotan thích hợp hơn nhiều cho câu hỏi thực tế.
Chris nói phục hồi Monica

14

Về mặt lý thuyết, đường ống lập trình chậm hơn đường ống chức năng cố định. Không có bộ xử lý đa năng có thể cạnh tranh với bộ xử lý trường hợp đặc biệt. Đường ống chức năng cố định ban đầu ít hơn một loạt các cổng logic trong một dòng nhanh nhất có thể về mặt lý thuyết.

Tuy nhiên, những ngày này các đường ống lập trình là tiêu chuẩn. Vì vậy, phần cứng thay vì hướng đến các đường ống lập trình. Đã mất hiệu quả ban đầu khi có một mạch được tạo riêng cho một luồng dữ liệu nhất định, nó phải phù hợp với trường hợp phổ biến nhất, đó là cách tiếp cận dựa trên shader. Tuy nhiên, đối với các tùy chọn tương thích ngược, đường ống chức năng cố định vẫn được cung cấp - nhưng chi phí là các chức năng cố định cũ phải được chuyển thành shader, điều này có thể phải chịu chi phí. Điều này sẽ giải thích sự khác biệt hiệu suất.


1

Lý do chính tôi có thể nghĩ đến là một giai đoạn trong đường ống cố định, rằng chương trình của bạn không cần đến nó. ví dụ hình ảnh một trò chơi trong đó tất cả các đèn đều tĩnh, bạn có thể dễ dàng thực hiện một shader thậm chí không thử tính toán cho ánh sáng động. trong trường hợp này, shader của bạn chạy nhanh hơn một shader được biên dịch sẵn đang kiểm tra một số phương trình cho ánh sáng động (một shader mục đích chung). cũng có những ví dụ khác, bạn có thể dễ dàng nghĩ ra nhiều khía cạnh nên được xem xét cho một đường ống cố định nhưng bạn có thể bỏ qua việc thực hiện trong mã GLSL của riêng bạn.


1

Đó chính xác là, các shader của bạn đang thay thế các bộ phận của đường ống. Nhưng thường thì các shader của bạn chuyên về một hiệu ứng cụ thể mà bạn muốn đạt được và không xử lý mọi tính năng đặc biệt có thể có thể được kích hoạt, do đó đơn giản hơn một shader mô phỏng đường ống chức năng cố định hoàn chỉnh. Trong khi đó, đường dẫn chức năng cố định phải đưa vào nhiều thứ và các tính năng OpenGL mà bạn có thể không muốn sử dụng (hoặc thậm chí chưa từng nghe về).

Và những ngày bạn đã thực hiện chức năng cố định trong phần cứng đặc biệt (ngược lại với phần cứng được lập trình đầy đủ), điều có thể xảy ra khi bạn sử dụng đường ống chức năng cố định là, trình điều khiển của bạn chỉ tải các trình tạo bóng đặc biệt của riêng nó thực hiện đường dẫn chức năng cố định. Nhưng những điều này có thể rất phức tạp, để cung cấp cho mỗi và mọi tính năng mà đường ống chức năng cố định cung cấp.


"những gì có thể xảy ra khi bạn sử dụng đường ống chức năng cố định là, trình điều khiển của bạn chỉ tải các trình tạo bóng đặc biệt của riêng nó thực hiện các đường dẫn chức năng cố định." ..Bạn có chắc về điều này? Bạn có thể vui lòng cung cấp bất kỳ tài nguyên đáng tin cậy? Cảm ơn.
Quazi Irfan

@iamcreasy Tôi không có nguồn đáng tin cậy (có lẽ là vậy), tôi phải thừa nhận. Nhưng tôi hoàn toàn nghi ngờ, rằng các card đồ họa ngày nay (vốn chỉ là một nhóm nhiều bộ xử lý nhỏ), vẫn có phần cứng chuyên dụng để tính toán ánh sáng hoặc tính toán sương mù. Thay vào đó, nhiều khả năng họ chỉ tải các chương trình được biên dịch sẵn cho điều này vào các giai đoạn đổ bóng cụ thể (cho dù chúng đến từ trình điều khiển hoặc một số bộ lưu trữ ROM, tôi không biết).
Chris nói Phục hồi lại

@iamcreasy theo wiki nouveau.freedesktop.org/wiki/CodeNames , đường ống cố định đã bị xóa trong GeForce 6xxx.
DirtY iCE

"những gì có thể xảy ra khi bạn sử dụng đường ống chức năng cố định là, trình điều khiển của bạn chỉ tải các trình tạo bóng đặc biệt của riêng nó thực hiện các đường dẫn chức năng cố định." Thật. "Nhưng những điều này có thể rất phức tạp, để cung cấp cho mỗi và mọi tính năng mà đường ống chức năng cố định cung cấp." Một trình điều khiển tốt sẽ tạo ra các shader cho chỉ chức năng bạn đã kích hoạt.
Chris
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.