Chính xác thì shader có thể được sử dụng để làm gì?


8

Tôi không thực sự là một người 3D và tôi chỉ sử dụng các shader một chút trong một số ví dụ Three.js và cho đến nay tôi đã có ấn tượng rằng chúng chỉ được sử dụng cho phần đồ họa của phương trình.

Mặc dù, bài viết Wikipedia (khá khó hiểu) và một số nguồn khác khiến tôi tin rằng chúng có thể được sử dụng không chỉ cho các hiệu ứng đồ họa, tức là, để lập trình GPU ( Wikipedia ).

Vì vậy, GPU vẫn là một bộ xử lý, phải không? Với một tập lệnh lớn hơn và khác nhau để thao tác vectơ dễ dàng và nhanh hơn, nhưng vẫn là một bộ xử lý. Tôi có thể sử dụng trình tạo bóng để tạo các chương trình thông thường không (miễn là tôi có quyền truy cập vào bộ nhớ video, có thể xảy ra)?

Chỉnh sửa: chương trình thông thường == "Ứng dụng", tức là tạo chương trình windows / console hoặc ít nhất có một số cách vẽ mọi thứ trên màn hình, thậm chí có thể lấy đầu vào của người dùng.


2
Bạn có ý nghĩa gì bởi "các chương trình thông thường"
kravemir

2
+1 Đối với câu hỏi phát triển trò chơi dễ thương nhất tôi từng thấy cũng đã suy nghĩ lại về quan điểm của tôi về thế giới.
hiệp sĩ666

1
"==" là bộ so sánh, không phải toán tử gán :)
kravemir

2
Vâng, tôi biết, nó vẫn còn hiệu lực để sử dụng. Tôi không muốn "gán" lời giải thích cho định nghĩa, tôi muốn đánh đồng chúng.
jcora

Câu trả lời:


13

Ban đầu, phần cứng xử lý đồ họa chuyên dụng có một bộ chức năng cố định, cứng. Nó sẽ lấy hình học đầu vào, làm những thứ rất cụ thể để biến đổi và raster nó, và sau đó đưa kết quả ra màn hình. Theo thời gian, chức năng này đã trở thành tham số hóa và cuối cùng là lập trình. "Shader" trở thành thuật ngữ được sử dụng cho các chương trình chạy trên GPU, vì chúng kiểm soát sự biến đổi và tô bóng của hình học.

Khi phần cứng GPU phát triển, ngày càng có nhiều phần mềm trở nên có thể lập trình được, vì vậy giờ đây, phần lớn các loại shader người ta chỉ có thể viết đóng góp gián tiếp vào việc tạo bóng thực tế của bất cứ thứ gì trên màn hình (Tôi đang đề cập đến những thứ như hình học và vỏ bóng ở đây ). Cùng với đó, việc khái quát hóa GPU như một thiết bị để thực hiện xử lý dựa trên luồng đồng thời quy mô lớn, do đó, trong khi ý định của GPU và các shader nói chung là để thực hiện một số loại hiệu ứng đồ họa ưa thích, chúng cũng có thể được sử dụng để thực hiện một số loại tính toán cho mục đích chung (đặc biệt là các tính toán phù hợp để được tính toán song song). Điều này thường được gọi là lập trình GPU mục đích chung, hoặc "GPGPU."

Tuy nhiên, GPU vẫn rất chuyên dụng và không thể làm được nhiều việc mà CPU có thể làm. Nó cũng có khả năng kết nối hạn chế với phần cứng còn lại trong một hệ thống, do đó bạn không thể thực sự viết các chương trình "thông thường" (với đầu ra của bàn điều khiển hoặc đầu vào chuột, et cetera) hoàn toàn trên GPU. Bạn có thể thực hiện các tính toán trên GPU không có ý định được hiểu là kết xuất, nhưng nó không phải là CPU độc lập theo đúng nghĩa của nó.


5

GPU không thể cho CPU biết phải làm gì. Nó chỉ có thể cung cấp kết quả trong bộ nhớ mà CPU sẽ đọc.

Shader / GPGPU không thể được sử dụng cho :

  • lấy người dùng nhập trực tiếp mà không cần CPU , vì chúng được thực hiện khi CPU bị gián đoạn
  • tạo bất kỳ ứng dụng nào , bởi vì các ứng dụng được quản lý bởi kernel và được CPU thực thi
  • tạo bất kỳ cửa sổ nào , bởi vì trình quản lý cửa sổ / máy chủ được thực thi trong CPU

Shader / GPGPU có thể được sử dụng cho :

  • vẽ các thứ trên màn hình / cửa sổ, nhưng nó phải được điều khiển bởi CPU
  • giải mã / mã hóa video
  • xử lý hình ảnh trong các trình chỉnh sửa đồ họa chuyên nghiệp - các hiệu ứng khác nhau có thể thực hiện song song như làm mờ, làm sắc nét các cạnh, ...
  • tính toán vật lý

Xem OpenCL . Nó có thể sử dụng các shader cho các tính toán phi đồ họa.

Chỉnh sửa dựa trên ý kiến:

Shader được sử dụng chỉ để kết xuất đồ họa. Thực hiện các tính toán phi đồ họa trong GPU được gọi là GPGPU .


Điểm cuối cùng không hoàn toàn đúng, bạn không sử dụng trình đổ bóng để tính toán vật lý, bạn đang sử dụng API GPGPU như OpenCL và CUDA.
dreta

@dreta Vâng. Đúng rồi. Dựa trên câu hỏi của anh ấy tôi nghĩ anh ấy có nghĩa là shader là đơn vị xử lý phần cứng. Ông nói "nhưng vẫn là một bộ xử lý".
kravemir

2
Vậy thì hãy sửa anh ta vì đã sai, tại sao bạn lại nhận ra quan niệm sai lầm của anh ta, anh ta nói rằng anh ta không phải là một bậc thầy về dựng hình, những người làm bóng không mơ hồ, họ có một vai trò cụ thể
dreta

-4

Đơn giản. Các đơn vị xử lý đồ họa cuối cùng đã có shader, mà một hiệu ứng quần ưa thích cho bóng. Điều này đã trở thành lập trình để các hiệu ứng ngày càng lạ mắt hơn. Cuối cùng, toàn bộ GPU đã trở thành một đơn vị SIMD.

SIMD có nghĩa là Dữ liệu bổ trợ đơn. Hiện tại các GPU giống như một cái cây. Nó có X nhiều lõi, mỗi lõi có Y nhiều lõi, có Z nhiều lõi. Bạn càng đi xuống cây, bộ nhớ càng nhanh và càng nhỏ, tính toán và xử lý song song càng nhanh.

Vì vậy, GPU đã trở thành một loại GPU Purpuse chung. Nó không được gọi là CPU vì nó không phải là đơn vị xử lý trung tâm, mặc dù nó có thể xử lý I / O, quản lý và lập lịch ghi nhớ.

Không cần phải nói rằng sức mạnh từ GPGPU đến từ việc phải thực hiện một số thao tác song song có thể phân chia trên nhiều dữ liệu cùng một lúc. Mặc dù nó vô dụng với hầu hết các công cụ phần mềm nói chung, nVidia đang làm việc để biến GPGPU thành CPU. Họ tin rằng họ có thể phơi bày GPU dưới dạng CPU ARM. Kỹ thuật dịch thuật này cũng nằm trong CPU x86, là RISC ở lõi của chúng.

OpenCL, CUDA và DirectX giống như một ngôn ngữ lập trình phân chia tính cách. Ví dụ, OpenCL chạy trên CPU, nhưng giảm tải 'bom' ("hạt nhân") đang được hưởng lợi từ SIMD, cho GPU.

Sẽ không còn lâu nữa trước khi tất cả kiểu CPU / GPU của Fusion / Sandy Bridge.


3
-1. Sự lựa chọn từ ngữ của bạn làm giảm đáng kể chất lượng của câu trả lời đó.
bummzack

Lựa chọn từ ngữ tự nó là vô nghĩa: en.wikipedia.org/wiki/On_Denote Do đó, nó không làm giảm chất lượng câu trả lời, bởi vì chất lượng không liên quan gì đến câu hỏi, nhưng logic. Đó thực sự là câu trả lời đúng nhất.
Vincent

2
Lựa chọn từ ngữ là rất quan trọng. Nếu bạn sử dụng ngôn ngữ gây khó chịu, thì câu trả lời của bạn sẽ không được coi là tốt. Một người có câu trả lời xứng đáng sẽ dành thời gian để đảm bảo rằng nó hùng hồn và thanh lịch.
Jonathan Pitre

Nếu bạn gặp vấn đề với ngôn ngữ, thì hãy chỉnh sửa câu trả lời. Tùy thuộc vào tất cả mọi người để làm cho trang web tốt hơn.
Tetrad

Nếu yêu cầu về sự hiểu biết logic đến từ một thây ma triết học lưỡng tính, nó sẽ làm tôi hài lòng bất kể, bởi vì kiến ​​thức tương đương với sức mạnh. Tôi không muốn trao lại kiến ​​thức cho những người đi xe đạp, những người coi trọng cảm xúc hơn logic. Nó chỉ cải thiện câu trả lời.
Vincent
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.