Как шейдеры отображаются на реальном оборудовании GPU

В попытке лучше понять программирование на GPU и GPU, я хотел бы получить более четкое представление о шейдерах и о том, как они реализованы в GPU. Существует ли связь 1: 1 между шейдерной программой и ядром графического процессора? Так работает ли программа вершинного шейдера на одном ядре, в то время как фрагментный шейдер работает на другом ядре? Затем данные передаются из ядра вершинного шейдера в ядро ​​фрагментного шейдера? Или каждое отдельное ядро ​​на GPU отвечает за все шейдеры и весь графический конвейер? Это означает, что одно ядро ​​GPU содержит вершинный шейдер, тесселяционный шейдер, геометрический шейдер и т. Д., И каждое ядро ​​будет выводить конечный пиксель. Любая информация, которая поможет укрепить мою психическую картину, будет полезна.

1 ответ

Точное отношение зависит от карты и водителя. Шейдерные программы преобразуются из универсальных форм (например, OpenGL или DirectX) в нечто, что карта может запускать напрямую, что-то вроде компиляции точно в срок для языков, таких как Java, которые используют байт-код.

Таким образом, отношения зависят от характера программы и карты. Карте может потребоваться назначить несколько ядер, если программа большая и сложная, но, скорее всего, одно ядро ​​будет запускать много экземпляров шейдера на нескольких потоковых процессорах.

Современные карты назначают работу динамически, поэтому редко встречаются отношения 1:1. Каждое ядро ​​имеет несколько потоковых процессоров, поэтому может обрабатывать несколько шейдеров одновременно, если они не слишком сложны.

Другие вопросы по тегам