图形API再革命!DirectX 11新技术预览
● Multithreading多线程处理
现在,多线程已经被广泛使用,早在多年前,桌面处理器就有了超线程的概念。而现在双核心、三核心甚至四核心的处理器也随处可见。GPU也是一样,不仅有单独的单卡双芯产品,多路SLI、Crossfire也奠定了GPU多核心的发展。但是,对于GPU系统而言,多核心的程序调用并不成熟,从我们之前的测试中就可以发现,很多游戏在SLI、CrossFire平台上性能都不正常。这是什么原因呢?
原来,多核心GPU在DirectX中,只能模拟成一个虚拟GPU。也就是说无论有多少物理GPU,到最后反映在DirectX中的只有一个虚拟GPU,因此只能设置一个命令缓冲区。如果驱动程序不够成熟的话,那么对多核心GPU的性能就无法得以体现。DirectX 11中的Multithreading正是为了解决这一问题而来。
当然,这里并不是说DirectX 10和DirectX 10.1不支持多线程处理,而是微软强烈不建议使用此功能,因为性能不会有太大提升,反而有时候会出现稳定性的问题。在DirectX 11中,为了加强多线程处理能力,DirectX 11改变了以往DirectX 同步运行的对象和Device,使其可以被异步执行的API调用,并且程序员能够更加准确的控制程序运行的时间。
在DirectX 11中,目前单一执行的Direct 3D设备被分为三个独立的InterFace:设备(Device)、立即执行范畴(immediate Context)和延迟执行范畴(Deferred Context),这样的设计可以将图形生成所需的资源做预先的存取。同时,CPU还可以利用显卡的多线程处理加快DirectX的处理,减少CPU的响应时间而使游戏不再受到CPU的瓶颈限制。