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

361
Boagz

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

1

1 ответ на вопрос

0

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

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

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