[面向图形的计算架构]
G80是NVIDIA的第一代GPU计算架构,其设计反映了人们对扩展GPU功能以解决高性能计算(HPC)问题的愿望,比如创新的共享存储器有助于加快矩阵乘法的计算速度,而矩阵乘法是诸多数学与物理效果算法的基础。
GF100的新一代计算架构则旨在满足各种各样的算法需求,并存进GPU在解决并行难题方面的应用和普及。凭借每个SM中的最多48KB一级缓存和全局共享二级缓存,在运行时中访问相同存储位置的线程会自动加速,不管它使用了哪种算法。
GF100计算架构针对游戏应用的另一大改进是调度。在游戏应用中,不会有单个内核占据主导地位,而是执行各种较小的内核,诸如布料、流体、刚体。在GF100上,这些小内核会并行执行,从而最大化地利用CUDA核心。
在利用计算的游戏之中,每一帧都会出现上下文切换,GF100将其时间缩短到了大约20微秒,从而保证每一帧多个内核之间执行精细的上下文切换。举个例子,一款游戏可能会使用DX11来渲染场景、切换至CUDA来应付选择性的光线追踪、调用DirectCompute内核进行后期处理、利用PhysX来执行流体模拟。
随着开发人员越来越多地将GPU用于通用计算,编程语言和调试方面的支持愈发重要。GF100是首款完全支持C++编程语言的GPU,而且NVIDIA还卡发了面向GPU的微软Visual Studio编程环境“Nexus”。
利用GPU计算实现的游戏画面特效相当多,这里我们只看两个。
(1)、光线追踪(TR)
光线追踪普遍被视为图形处理的未来发展趋势,即使不完全取代光栅化也应与其结合。如今随着GF100的问世,交互式光线追踪首次在普通PC上成为了可能。
GF100计算架构在设计之初就考虑了光线追踪。它是首款在硬件上支持双循环的GPU,能够高效执行光线追踪和其他大量图形算法。通过提升精细存储器的存取性能,GF100的一级和二级缓存大幅提升了光线追踪效率,其中一级缓存为邻近的光线增强了存储器的本地性,二级缓存则扩大了至显存的带宽。
GF100不仅在标准光线追踪中表现出色,而且在高级全局照明算法中也有不俗的表现,比如采用大量光线来收集场景中环境光照信息的路径追踪。早期评估显示,GF100的路径追踪性能是GT200的最多四倍。
光线追踪对硬件资源的消耗非常大,所以为了维持游戏性能,可以选择性地运营光线追踪,比如使用光栅化执行场景的第一个通道,确定为反射光的像素再通过光线追踪接受进一步处理,这种混合渲染模式能够在画质和速度之间取得更好的平衡。
(2)、平滑粒子流体力学(SPH)
逼真的流体模拟一直是电影的卖点,比如《终结者2:审判日》中的液态金属机器人,比如《2012》中的滔天洪水,不过其计算复杂度阻碍了在游戏等实时应用程序中的普及。
平滑粒子流体力学(SPH)算法出现在2003年,来自天体物理学算法,最初能以5FPS的速度模拟5000个粒子。之后这种算法被集成在了PhysX API之中,又被收归NVIDIA帐下。去年的《雪域危机》是首款利用PhysX SPH的游戏,能够在极短的时间里模拟3万个水粒子,不能不说是一个突破,但数量依然不足,无法体现出以假乱真的流水效果,极高的代价也限制了性能。
GF100是首款能够实现高保真流体模拟所需性能的GPU,搭配改进型SPH解算器可模拟每帧12.8万个以上的SPH粒子,能够在游戏中加入高品质的SPH流体效果,生成较为自然的水花四溅、水漩涡和溢流效果,而且速度飞快,足以达到140FPS。
另外借助不同的参数,SPH还可以用来模拟具有更高粘度和不同滴淌特性的血液。