DirectX 11 是微软最新推出的业界标准编程接口提供一个利用次世代图形处理器之先进潜力的通道。它将会是新的 Windows 7 作业系统的关键组成部分,而微软也决定最终也会以软件更新的形式使 Windows Vista 也支持这个编程接口。 DirectX 11 的其中一个重要的新功能是提供 DirectX 计算支持,使开发者能利用近代图形处理器的大规模并行处理能力去加速更广泛但以往只能在中央处理器上运行的应用程序。叫计算着色器的经过程序的存取在图形处理器上运行,它们能使新的图形技术得以实现(例如顺序无关透明化、光线追踪和先进的后期处理效果),或加速各种各样的非图形应用程序(举例说视频转码、视频像素倍增技术、游戏物理模拟和人工智能)。 今日的图形处理器在一个特定的成本和功耗预算下提供以数量级计比今日的处理器更多的原始处理能力。不过,作为特定应用的处理器,图形处理器欠缺处理器的灵活性,使之对开发者去充分发挥其潜力的这个目标充满挑战性。最近的图形处理器包括了新功能旨在改善它们的灵活性并使这些挑战更容易克服。另外一个挑战随着 DirectX 计算使用能适应在拥有不同能力之不同图形处理器架构上的统一编程模型而开始显现。DirectX 11 的编程接口使用一组叫着色器模型的设定档处理这个情况。每个着色器模型包括较低版本号所包含功能的超集。使用更高的着色器模型的好处包括:
计算着色器对比其他并行处理器编程模型的一个优点是其与用于图形编程的其他着色器类型,例如像素着色器和顶点着色器,共用一个统一的指令集。故计算指令集虽然是 DirectX 11 的新功能,部分功能减少的着色器模型能在较早的硬件上运行,如下所述:
这容许开发者在使用较低版本的着色器模型使兼容性最大化,或使用较高版本的着色器模型以简化开发过程并使性能最大化这两者之间去选择。 很多有趣的演算法和技术实际上只可能在即将发布、支持着色器模型 5.0 的 DirectX 11 级别图形处理器上运行。这里是着色器模型 5.0 所提供的,相对着色器模型 4.0 部分的重点优势的一个概览: 这些功能将会在下面更详细讲解。 1. 改良的并行性 以下在 DirectX 11 等级图形处理器的功能会**增加开发者开拓图形处理器的并行性: 增加的线程组大小和三维线程调度:一个线程组是一套一起运作、有效地实现数据并行算法分块的线程。DirectX 11 等级的图形处理器容许线程组内各线程间的协调数据交换,从而改良了记忆体存取的效率,也因此使并行演算法在更少次数的执行里完成。这并非只为了增加处理速度而设计,但同时也设计作改良图形处理器的耗电效率,因容许在更少存取芯片外的记忆体而提供更高的处理能力。着色器模型 5.0 支持更大的线程数量和更灵活的线程组三维索引,给与开发者在确定其算法事情上拥有更多的控制权,并因为图形处理器中提高的多线程处理而启动额外的处理能力。 原子操作的支持:这个是中央处理器的一个重要功能而开发者一直要求在图形处理器上也有这个功能。原子操作能在尝试修改同一记忆体地址时使用更有效率和准确的操作组合。图形处理器能并行处理数以千计的线程或线程组,而这些线程里面如果有两个或更多的线程尝试对同一个变数进行修改或存取相同的记忆体位置,就有可能会导致数据损毁。在没有原子操作的情况下,开发者不得不选择究竟要修改其演算法以防止这个情况的出现,或者串行化去更新共享变数或记忆体位置(实际上把大部分并行计算所带来的性能增长都消除)。原子操作容许在不管并行执行线程数目的情况下把这些情况很优雅地处理掉,这能使性能最大化并简化从中央处理器为主的演算法移植到图形处理器上面的复杂程度。 Gather4 指令:近代图形处理器使用叫纹理单元的专用硬件块以快速提取数据到其相应的处理核心里面。历史上这些纹理单元都被优化作图形渲染,而例如的双线形过滤等的技术就在这里使用以提升图像品质。计算着色器也能时常利用这些相同的单元去提取数据,但它们却普遍地不需要纹理单元的纹理过滤能力,使这些单元未被充分利用。支持着色器模型 5.0 的图形处理器有能力以 Gather4 指令去使用这些额外的数据提取能力,而能同时提取 4 个数值并提供 4 倍的数据带宽。 2. 经改良的计算精度和整数处理:DirectX 11 可以按照 IEEE-754 标准以支持双精度(64 位元)浮点在图形处理器上的操作。直到最近,这个水平的浮点操作精度只在中央处理器上支持,而图形处理器则被限制到单精度(32 位元)操作。虽然单精度对于大部分图形应用程序已经足够,但对于部分需要对单一数据值作大规模迭代次数,或者以非常大或非常小的数值去计算的模拟和复杂的数字运算任务来说则可能不足够。着色器模型 5.0 并增加新的整数和位操作类指令,例如前导 1 计算、寻找第一位元、提取/插入位元字段、位元倒序,和位元位移操作。应用程序如视频处理及加密法均广泛地使用这些动作,故能在 DirectX 11 图形处理器上有性能提升的得益。 3. 计算着色器与渲染管线的紧密整合:虽然计算着色器主要供非图形任务用,他们能被时常使用增强及跟渲染管线相互操作去影响发送到显示器的东西。例子包括模拟任务,如游戏物理和人工智能,使能影响物件和控制画到屏幕上的人物的运动和行为;排序技术,如顺序无关透明化,会优化大量物件的渲染;和后期处理效果,如色调影射和景深效果,能应用不同的滤镜去修改和增强一个渲染完的图像。DirectX 11 计算着色器跟其他的用于渲染得着色器种类(包括顶点、外壳、域、几何和像素着色器)共享一套共有的指令集,并能共享数据结构去更实用更有效地实现以上技术。 4. 经改良的编程简易度及更有效的记忆体使用:强大的硬件没有能利用硬件能力的软件是无用的。作为一个计算编程语言,着色器模型 5.0 带来明显的改良并能增强开发者为图形处理器塑造以往被认为是不设实际或办不到的程序和演算法。通过解放用作绕过以往的图形处理器计算语言限制的开发时间,开发者的想象力和精力能改为集中在实际解决计算的问题。着色器模型 5.0 增加了部分重点功能使更容易去模型及解决在图形处理器上的问题,包括: 增加的共享记忆体及经改良的存取:DirectX 11 计算着色器的其中一个重要功能就是共享记忆体的支持,容许线程之间的沟通。着色器模型 5.0 把线程组可用的共享记忆体由 16 千字节加倍到 32 千字节。除了加倍共享记忆体以外,DirectX 11 级别图形处理器容许索引的读取和写入到这个记忆体之中,而较旧的 DirectX 10/10.1 级别图形处理器则限制存取为非共享写入、共享读取。容许线程直接读取和写入共享记忆体增加线程组内部的数据并行性并简化原本设计给中央处理器的代码移植在图形处理器之上运行之动作。更大的线程组和更多的共享记忆体的配搭也可以**减少部分演算法需要的非本地记忆体存取,这也将会降低应用程序的记忆体频宽需求并增加性能。 消耗/追加缓冲:着色器模型 5.0 支持一个新种类运作方式类似堆栈或清单的数据缓冲器,而不是一个固定阵列的数值。新数值产生后会被写入清单的最后,或需要时从清单的最后读取。这个用于实现不规则数据结构,结构中的每个元素需要不用数目的数值,或对自适应技术例如对每一个元素作可变数量工作的流数据结实化(Stream Compaction)很有用。追加缓冲容许这些步骤一次性的执行这些数据动作,而非需要多次执行而消耗更多记忆体频宽和计算周期。 无序存取查看(Unordered Access Views,UAV):无序存取查看是容许数据从任意的位置而非预定次序读取和写入的缓冲器。也被称为“集散”操作,这个添加了许多在旧有的图形处理器之上所没有的灵活性。DirectX 11 扩大这个灵活性并超越 DirectX 10 等级图形处理器的可能性,以容许计算着色器同一时间存取最多达 8 个不同的无序存取查看而不是单单一个。DirectX 11 的编程接口也容许这些无序存取查看被像素着色器存取,即促进了计算着色器和渲染管线之间的数据共享。这些增强容许各种各样的前期和后期处理演算法以更有效率的方式在 DirectX 11 等级图形处理器上实现。 间接运算调度:这个功能使前述的渲染或计算着色的新一代工作量不受中央处理器介入。这进一步降低中央处理器消耗并腾空更多的处理时间供其他工作之用。 |
Archiver|手机版|小黑屋|Chiphell ( 沪ICP备12027953号-5 )310112100042806
GMT+8, 2024-11-25 07:44 , Processed in 0.006850 second(s), 7 queries , Gzip On, Redis On.
Powered by Discuz! X3.5 Licensed
© 2007-2024 Chiphell.com All rights reserved.