Как шейдеры соотносятся с реальным оборудованием графического процессора

Как шейдеры соотносятся с реальным оборудованием графического процессора

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

решение1

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

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

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

Связанный контент