<b>Pentium III处理器的单指令大都据流扩大指令(3)</b>[VC/C++编程]
本文“<b>Pentium III处理器的单指令大都据流扩大指令(3)</b>[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
概要 :
随着Intel Pentium III处理器的公布,给程序计划人员又带来了很多新的特点.操纵这些新特点,程序员可认为用户创造出更好的产品. Pentium III和Pentium III Xeon(至强处理器)的很多新特点,可以使她可以比Pentium II和Pentium II Xeon处理器有更快的运行速度,这些新特点包含一个处理器序列号(unique processor ID)和新增SSE处理器指令集,这些新的指令集就像Pentium II在经典Pentium的底子上增添的MMX指令集.
1. Data Swizzling
要操纵Pentium III处理器SSE指令的加快功效也是要有一定的代价的.因为SSE指令只能操作她定义的新数据范例(128位).假如利用程序利用自己的数据范例格局,那么在举行SSE指令操作之前要将他转换为这种新数据范例,操作完成之后又要把他转换回来.
这种把一种数据格局转换到另一种数据格局的操作就称为"data swizzling".
这种转换是需求时间和耗费处理器核心周期的.假如一个利用程序频繁的举行数据格局转换,处理器核心周期的浪费是很严重的.因此,这种数据格局的转换是必须得到关注的.
1.1 数据组织
普通,3D利用程序将一个顶点保存在一个和他相配的数据构造中.当表达多个顶点时,利用程序利用这个构造的数组,也叫做AoS来表示.一个典型的操作是对表示顶点的x、y和z坐标举行的.下面的代码就给出了这样一个表示3D顶点的数据构造.假如要表示大量的这样的顶点,就要用到这个构造的一个数组了,如图9所示.
struct point {
float x, y, z;
};
...
point dataset[...];
图九 :构造数组
SSE的长处,就是可以同时对多个顶点的举行处理.这样我们就必必要可以便利的处理到表示多个顶点的数据(比方表示4个顶点x坐标的4个浮点数).这是可以实现的,我们可以把表示一个顶点的x、y和z三个坐标值辨别调集在一同,然后利用程序对他们举行处理.要实现这些,利用程序必须重新组织数据到三个单独的数组中,大概成立一个数组构造,构造中每个数组对应一个这样的坐标值数组.这个数据构造也称为SoA构造.(我是这样理解的: 在不用SSE时是把表示一个顶点的三个坐标值组合到一个数据构造中,处理时一个值一个值的举行.而利用SSE今后,可以把全部点的各坐标值辨别组合到3个数组中,处理时取出这样一个数组的4个值同时履行).
下面的代码就定义了这样的一个数组构造,如图10用图表来表示的数组构造.
struct point {
float *x, *y, *z;
};
图十: 数组构造
以上是“<b>Pentium III处理器的单指令大都据流扩大指令(3)</b>[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |