为了更好地理解 GPU 和 GPU 编程,我希望更好地了解着色器以及它们在 GPU 上的实现方式。着色器程序和 GPU 核心之间是否存在 1 对 1 的关系?那么顶点着色器程序是否在一个核心上运行,而片段着色器则在另一个核心上运行?然后数据是否从顶点着色器核心传递到片段着色器核心?或者 GPU 上的每个核心是否负责所有着色器和整个图形管道?这意味着一个 GPU 核心包含顶点着色器、曲面细分着色器、几何着色器等,并且每个核心将输出最终像素。任何有助于巩固我的心理图景的信息都是有用的。
答案1
具体关系取决于显卡和驱动程序。着色器程序从通用形式(例如 OpenGL 或 DirectX)转换为显卡可以直接运行的形式,类似于使用字节码的 Java 等语言的即时编译。
因此,这种关系取决于程序和显卡的性质。如果程序很大且很复杂,显卡可能需要分配多个核心,但更可能的情况是,单个核心将在多个流处理器上运行着色器的多个实例。
现代显卡会动态分配工作,因此很少出现 1:1 的关系。每个核心都有多个流处理器,因此如果它们不是太复杂,可以同时处理多个着色器。