В попытке лучше понять GPU и программирование GPU я хотел бы получить более четкое представление о шейдерах и о том, как они реализованы на GPU. Существует ли соотношение 1 к 1 между программой шейдера и ядром GPU? Так выполняется ли программа вершинного шейдера на одном ядре, а, скажем, фрагментный шейдер на другом ядре? Затем данные передаются из ядра вершинного шейдера в ядро фрагментного шейдера? Или каждое отдельное ядро на GPU отвечает за все шейдеры и весь графический конвейер? Это означает, что одно ядро GPU содержит вершинный шейдер, шейдер тесселяции, геометрический шейдер и т. д., и каждое ядро выводит конечный пиксель. Любая информация, которая поможет укрепить мою мысленную картину, будет полезна.
решение1
Точное соотношение зависит от карты и драйвера. Программы шейдеров преобразуются из универсальных форм (например, OpenGL или DirectX) в то, что карта может запускать напрямую, что-то вроде компиляции just-in-time для языков, таких как Java, которые используют байт-код.
Таким образом, связь зависит от характера программы и карты. Карте может потребоваться назначить несколько ядер, если программа большая и сложная, но более вероятно, что одно ядро будет запускать много экземпляров шейдера на нескольких потоковых процессорах.
Современные карты распределяют работу динамически, поэтому редко бывает соотношение 1:1. Каждое ядро имеет несколько потоковых процессоров, поэтому может обрабатывать несколько шейдеров одновременно, если они не слишком сложны.