|
微软D3D12加入工作图新功能,将解除GPU通用运算天花板微软计划在3D图形程序开发接口D3D12加入工作图(Work Graphs),微软提到,这项功能可解除目前GPU程序开发模型中的限制,让GPU通用运算能够处理更多的工作负载,更广泛地被应用。AMD、Nvidia、英特尔和高通四大芯片厂商都参与工作图的设计。 不少的GPU工作负载,由之前其他GPU的工作所衍伸,传统上,当GPU工作负载的行为,需要根据之前的GPU运算结果决定,则系统还是必须先将GPU运算结果回传CPU,交由CPU解读之后重新发派工作给GPU。 像是Epic Games所开发的虚幻引擎5,里面所提供的两项新技术,虚拟化几何技术Nanite以及全局光照解决方案Lumen,就因为传统CPU与GPU架构的限制,使得当前运算着色器范式已经碰触到架构的极限,因为Nanite和Lumen所使用的范式,需要由CPU发出一系列独立的调度。 虽然这种模式在多种情况运行良好,但是却会增加GPU和CPU之间的通信开销,且在等待CPU的时间,GPU可能出现闲置,因此如果存在一个机制可以直接由GPU重新发派工作,那运算将会更有效率,也能最大化GPU的利用率。这样的概念之前在D3D12就已经被使用过,一个称为ExecuteIndirect的指令,就允许GPU在不需要CPU介入的情况下下,依据先前GPU的运算结果,决定所要执行的工作负载。 新的工作图(Work Graphs)是让GPU上运行的着色器线程(生产者),也可以请求执行其他工作(消费者),而一旦GPU有空,系统便可以安排这些重新请求的工作给GPU,系统也能管理资料流所使用的内存。工作图可以被看作是一种结构,其中的节点由着色器程序代码组成,每个节点都可以重新请求其他节点。 工作图可以表达出开发者所设计的算法意图和结构,但又不会过度造成开发人员的负担,开发人员不会具体知道特定程序代码会在哪个硬件上执行,微软提到,这种模型的异步性,让系统拥有更大的自由度,决定执行工作的最佳方法。 不过也并非所有应用程序的工作负载,皆适用工作图模型,依据工作的特性和硬件的复杂度,现有方法可能更适合。而目前工作图模型的设计,主要把重点摆在生产者与消费者之间的运行,没有特别设计同步等待的概念,因此让消费者启动等待生产者节点完成所有工作,虽然可以巧妙安排着色器逻辑来完成这项目的,但是目前尚未有原生同步支持。 AMD、Nvidia、英特尔和高通都加入协助设计工作图,虽然目前工作图还在早期预览阶段,但AMD显卡驱动程序则率先支持工作图,他们已在AMD Radeon RX 7000系列显卡的Adrenalin版本驱动程序实例工作图API,同时也有相对应的文件供开发者阅读。 |