有3种代码包含在利用GPU的程序中:
每个程序从1开始,使用2在GPU上调用预编译的3.
那么,使用上述分类,GPU“驱动程序”中到底包含了哪种代码呢?GPU是否需要类似操作系统的内核(而不是上面提到的库达内核),就像CPU一样?这是否也包含在驱动程序(通常是GB大小)中?
发布于 2023-05-28 02:09:39
你的分类法充其量是不精确的。更准确的分类是:
这与您的分类法有许多不同之处。"DirectX“是在所有这些中传播的。并不是每个DirectX函数都是驱动程序代码。对于D3D12,构建命令缓冲区不需要驱动程序特权。它只是创建特定于GPU的令牌,最终将被赋予GPU。只有将这些命令交给GPU的实际操作才需要驱动程序特权。
此外,DirectX实现可以(而且将会)将内容插入到您的GPU着色器代码中。
"GPU驱动器“因此生活在这三个地方。它们中包含的代码用于实现用户代码用于与GPU通信的任何API抽象。驱动程序使用实现该抽象所需的任何工具。
至于GPU正在做什么,它通常是相当简单的。大多数GPU都有一个或多个队列,驱动程序将(应用户代码的请求)向其提交一系列命令。这个命令序列可以被认为是一个“程序”,但它通常比这个更简单。它们只是命令,队列将使用各种GPU资源执行,按顺序(某种程度上),首先执行到最后。
可能会有一系列状态设置命令,然后是呈现命令。该呈现命令将生成多个顶点着色器调用,这些调用贯穿整个呈现管道。此操作将涉及使用许多资源,包括计算单元。
命令队列不是程序,它只是一系列操作。可能没有条件逻辑,没有变量,这都是硬编码操作。这些操作的内部可以是灵活的,但哪些命令是可用的。
驱动程序的工作(以及其他许多事情)是根据用户代码的要求管理各种队列。它还将内存分配给进程(通常是根据请求)、在虚拟GPU内存中或从虚拟GPU内存中分页等。
但这一切都主要发生在CPU上。GPU仍然是一个主要由直接CPU操作控制的设备。
https://computergraphics.stackexchange.com/questions/13497
复制相似问题