显卡 频道

引爆3D力量:下一代DirectX前瞻

整数指令集

  对程序员来说,编程的时候不必受到处理器指令集的限制将大大提升写程序的效率,但对于图形处理器来说,要实现这个目标还有很长的路要走。其中,一个最为急待改进的方面就是处理整数运算方面的指令集。目前,在着色器当中处理的大部分指令都是对应处理浮点数运算而设置的,的确,对于图象方面的处理而言,采用浮点运算指令集对于程序开发而言将带来许多便利,但当我们进行动态分支预测以及只读内存查找的时候,比如说定位一个顶点缓存值的地址的时候,用浮点运算指令就会带来相当多的麻烦。

  在目前的图形处理器上,我们唯一需要进行内存寻址的操作就是查找相应的纹理数据,而这些纹理数据均为浮点类型数值。如果一个内存地址值并不能够唯一对应于一个纹理数据的取值,那么通常就会得到两种结果,我们用一个最为接近的纹理数据取值代替我们所需要精确查找的纹理数据取值,或者是把几个附近的纹理数据取值做一次平均,把结果作为我们需要的纹理数据取值。对于图象的纹理效果而言,这样的做法完全没有问题,但毫无疑问,这样是无法实现通用化内存寻址的,因为用不是很精确的浮点数是无法将连续的内存块进行精确的标识。微软在他们的4.0版一体化Shader模型中加入了相应的指令集,完全解决了上述的这些问题,使得通用化内存寻址成为可能。

不受限制的资源

  虚拟显存技术的引入同时也为资源受限的问题提供相当不错的解决方案。首先,通过引入虚拟显存管理策略,以AGP总线为接口的系统内存能够以更高的效率向图形子系统传输数据;其次,由于仅采用统一的逻辑地址空间对虚拟显存进行编址,因此程序员可以在一个相对不受限制的空间里面进行自由操作,只要不超出整个逻辑地址空间就可以了。从中,大家也可以看到如何将所有物理存储设备映射成一个统一的虚拟存储空间的策略是相当重要的。当然了,通过增加虚拟显存管理的策略并不能够达到当前最优的性能(最优的性能只有在对硬件进行完全的优化的时候才能够得到,通过通用化的管理方法是无法得到最优性能的),但却可以大大增加程序开发应用的效率并达到一个可接受的效能程度,这才是我们所希望看到的结果。虚拟显存地址空间的分配也无需过于拘束,比如说采用了虚拟显存管理技术的3DLabs Wildcat VP图形处理芯片拥有16GB的虚拟地址寻址空间,这是一个相当可观的内存空间,对于程序员来说,他们的开发就不会因此而受到过多的限制。

不受限制的资源
#$[*106924.jpg*#a*#0*#0*#center*]$# 不受限制的资源
  • Shader模型支持多种类型的不受限制资源, 但如果使用过多则会使得速度变得“太慢”
  • “太慢”的定义是实时性不足或者在640×480 分辨率下的帧速不到10fps
  • Shader模型资源限制的两个取值
    1、针对实时性能应用测试所得的限制取值
    2、在WHQL中测试所得到的限制取值上限
点击看清晰大图

  虚拟显存技术和Shader模型结合起来的使用效能是一个相当有趣的话题。其中一个值得探究的问题就是内存中的Shader指令处理问题,对于传统的内存系统而言,Shader的指令长度并没有受到限制,而在内存当中,Shader的指令是被当作一个抽象的数据块进行处理的,那么这个数据块的大小是否能够很好的放到图形处理单元的执行管道当中呢?这一点我们是不知道的。只要Shader指令被加载到图形处理单元的时候,在这条指令推出执行单元之前全部的顶点和象素都会被处理一次,因此我们可以得出这样的一个结论:如果Shader指令较长的时候,那么在图形处理单元当中就必须开辟更多的空间以供应指令执行管道之所需,或者将整个Shader指令划分为几个较小的部分然后多次运行。由于在图形处理单元当中,为了能够提高效能,指令执行管道的大小一般都是固定的,因此它并不会因为指令过长而动态增加执行管道的大小,因此当我们处理较长Shader指令的时候,我们采用将指令划分为几个较小的部分来管理,而回想起先前我们所说的虚拟内存管理策略的时候,我们也提到过页面管理的方法,这与较长Shader指令处理方法可以说是不谋而合,也就是说我们只要设定一个限制值,将较小Shader指令划分为几个大小相同的部分然后放到虚拟内存当中,虚拟内存向图形处理单元传输的数据块大小是固定的,这样图形处理单元当中的指令执行管道就可以很好的进行相应的处理了。

  因此对于Shader模型而言,虚拟内存并非作为一个单独的实体对应存在,为了适应Shader指令的执行应用,虚拟内存被划分为许多相对独立的页面。假定图形处理单元当中设置的指令执行管道可以执行一整个页面当中所包含的指令,那么我们的Shader操作就可以建立起一套流水线式的运作机制,加载一个页面,然后运行,停止下来之后再加载一个新的页面,然后运行,如此反覆指导全部包含指令的页面被加载到处理器当中,此间,执行管道的作用便相当于通用处理器当中的L1 Cache,而整套运作的机制和通用处理器所使用的机制是完全一致的。

  通过虚拟显存技术,Shader指令的长度可以不受限制,存储系统可以存放的图象纹理可以更多,寻址的方式变得轻松简单,于是我们的下一代DirectX技术就实现了可用资源“不受限制”的强大功能。当然了,资源的“不受限制”还是受到硬件实际可用资源的限制,指令过长无法直接放置到图形处理器的执行管道里面,那么就需要多次加载指令页面,一来一回性能必然受到影响,而当我们所需要处理的纹理数据太多,有相当一部分实际上是放在了系统内存甚至是硬盘空间当中的话,从系统内存、硬盘空间到显卡显存之间的过渡也会让整个图形子系统的性能受到影响。为了解决这个问题,微软定出了两个门限值,超过第一个门限值的时候,系统的实时处理能力开始严重下降(但仍旧能够工作,3D设计场合并不需要太高的实时性能),超过第二个门限值的时候,系统就不能够正常工作(在640×480分辨率下,fps值不足10)。

0
相关文章