荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: trunks (深蓝的海), 信区: Hardware
标  题: CPU软加速--全面剖析Intel下一代SSE技术(三)
发信站: 荔园晨风BBS站 (Tue Apr  1 20:38:06 2003), 站内信件

新的Prescott指令

  最后,来看看这篇文章的主题——英特尔在全新的Prescott CPU
中引入的新指令。

许多3D程序开发者都想获得一套方便快捷的程序库,用以描述几何建
模,向量和复数。

class Vector
{
float x,y,z;

public:

inline friend Vector operator +(const Vector &a, const Vector &b);
//addition

inline float norm() const; // vector length
inline float norm2() const; // vector length squared

inline friend float Dot(const Vector &a, const Vector &b); // scalar
product
};

  这样我们就只用写a=b+c,而不比写那繁琐的
a.x=b.x+c.x;a.y=b.y+c.y;a.z=b.z+c.z。但有一个问题却摆在了我们面
前:任何一种低效的编译器在调用处理向量加法函数时都不尽如人意,
因此用繁琐的方式来书写反而显得更有效率。结果显示SSE有助于向量求
和,但在计算数积与矢积方面就收效甚微了。

  而现在我们即将目睹了一个新的飞跃:Prescott新的指令集较之SSE
和SSE2,对于优化向量计算将更加的简单快捷。

我们来研究得稍微深入一点。

  首先,把一个SSE寄存器里面的分量相加,我们有下面的选择。

       w2    z2    y2    x2
HADDPS
       w1    z1    y1    x1
=
      z1+w1 x1+y1 z2+w2 x2+y2

  这样,我们就可能得出两个向量或两个向量的模的数积,而用不着额
外的寄存器,并且只需三条指令就足够了。当然了,我们希望水平加法指
令能执行得足够快。起码我们希望它不要把CPU的流水线清空。

  同样的,我们可以减去一个寄存器中的分量。 存放在一个SSE2寄存器
里的两个数也有可能相加和相减。同样用一条指令可以将两个元素组合成
加法和减法。

          y2     x2
ADDSUBPD
          y1     x1
=
         y1+y2  x1-x2

  这条指令来自于复数乘法的性质:(a+bi)*(c+d1)=a*c-b*d+(b*c+a*d)i。
现在,SSE2对复数计算的最优化处理就变得相当简单。其实SSE2很像3DNow!,
但却能处理精度更高的数据。

下面列出了所有新的Prescott指令。

对寄存器的水平运算:

HADDSP SSE寄存器的水平加法
HSUBPS SSE寄存器的水平减法
HADDPD 存放于同一SSE2寄存器中两元素求和
HSUBPD 存放于同一SSE2寄存器中两元素求差
(无论从什么角度看,这些都是非常有用的命令,是软件开发者所期待已
久的。它们使自动与手动最优化运算简化了一大截。)

数据读取命令:

MOVSHDUP 只需复制第二与第四个32位元素从而把数据读入到接收寄存器中
MOVSLDUP 只需复制第一和第三个32位元素从而把数据读入到接收寄存器中
MOVDDUP 复制并加倍原寄存器的前半部分从而把数据读入到接收寄存器中
(对自动与手动最优化运算很有用)

组合加减法:

ADDSUBPS (x1,y1,z1,w1)*(x2,y2,z2,w2)=(x1-x2,y1+y1,z1-z2,w1+w2)
ADDSUBPD (x1,y1)*(x2,y2)=(x1-x2,y1+y2)
(大大简化了复数运算,在自动程序优化中起作用)

特殊数据读取:

LDDQU 优化不稳定数据的读取
(为相对少见的精细手动和自动最优化运算而设计)

数据转换:

FISTTP 唯一的新x87指令。把共处理器堆栈内容转换为整数形式
(在自动软件最优化运算时非常有利于编辑,曾经在很久以前引入x87指
令集时被遗漏,现在作了弥补。)

加速线程支持改进:

MONITOR/MWAIT 处理器在存储器中选定的部分对记录进行跟踪,并且激活
无响应的数据流。
(为加速线程支持与一般的多线程简化程序和OS服务的最优化运算)

Intel和AMD前景分析

  prescott新加入的指令使整个指令集得到进一步的优化和完善。在芯
片技术上出现根本变革之前,它都能够从容应对。当然,我们原本希望增
加更多的寄存器以提升性能,但是受考虑到x86指令格式的限制,这样做
很难保证兼容性。不过这也带来了一些优点,例如高效的fisttp转换命令,
同时自动生成SIMD优化代码也变得更加简单。

  对于这款未来的处理器,除了几乎肯定的价格劣势外,还有一个薄弱
之处:Prescott进一步增加的流水线(pipeline)阶数会引起条件分歧
(conditional branching)的低效,为了提高cpu的频率,更长的流水线已
经成为了Intel无奈的选择。

  客观的讲,Prescott将会成为Intel近年来发布的最为完美的产品。
我们还无法预计它的能耗和散热,但希望在这方面不会出现任何问题。至
于价格,我们有理由相信它不会高的离谱。看看L2 cache的容量吧:1MB!
那么下一代Celeron会是个什么样呢?它将会有512KB L2 cache吗?考虑到
大部分应用程序只需要少于256KB 的cache,那512KB L2 cache的赛扬已
经成为了一款怪兽级的芯片,但生产成本还是有很多的下降空间,由此可
见,向新技术的转换的确有利可图。

  当然,有一种情况会让Prescott的价格居高不下:没有竞争对手!我
们期待着AMD的新64位处理器:Athlon 64能尽快出炉,成为挑战Prescott
的强劲对手。我们在查阅关于AMD Athlon 64的文章时,也的确看到了相当
令人兴奋的技术细节。现在我们将详述它对于软件开发者的吸引力。

  AMD终于实现了SSE2支持!这使得Intel的处理器在SSE2优化的应用程
序中优势殆尽。Athlon 64 在32性和64位工作模式中都表现出色,后者将
演绎AMD x86-64架构的优势。在32模式中,Athlon 64从软件开发者的角
度出发,犹如 3DNOW! 和Pentium4的集大成者。此外,在处理非SIMD优化
代码时Athlon 64也能有较高性能的表现。 作为AMD的强势产品,新的
Athlon 64将会成为Intel强有力的竞争者,不过前提是它在性能上确实不
负众望。

  我们可以大胆预测一下,Pentium 4将继续保持主频上的优势,并在
整体应用测试里领先Athlon处理器。但从很多网上的测试来看, Athlon
64在某些测试里则会大幅领先Pentium 4 。

  但是在Athlon 64独竖一帜64位模式下情况会怎样呢?除了程序需要
重新编制外,还有三种主要特征值得关注:数量扩大到两倍的寄存器单元,
64位算法和高达2GB的应用程序虚拟地址空间。64位算法虽然本身性能强大,
但是在桌面系统上应用范围很狭窄;大部分程序应用32位算法已经绰绰有
余。AMD指出,在执行某些破译任务时,64位整数算法将更为快速。

总结

  虽然2GB的内存容量在今后几年都会是梦幻配置,但是桌面应用程序
对于地址存储空间的要求确是越来越大了。CPU中额外集成的寄存器为开
发者提供了很大的便利,他们可以更方便地存储函数参数以及在编码中
加入独立的命令,而不必频繁的访问内存。同时,优化的编译器会使这
一切变得更加简单。由于寄存器数目的增加,CPU可以担负更大的工作量,
在内存带宽较低的时候,这将是一个显著的优点。如今的CPU都配备了
大量的写入缓存,它使得在交换寄存器时,无需频繁的读取内存。如果
被发送的数据立即再次被调用,它将立刻从缓冲而不是内存中被调出。
在Prescott中,写入缓冲有所增加。

  新一代的AMD处理器将逐鹿高端服务器市场。它拥有庞大的地址空
间和更多的寄存器,能够高速的编码,并很好的适用于数据库服务器。
合理的定价将使获得一部分用户的青睐。

  考虑到目前桌面系统上日益繁重的图形应用,特别是3D游戏,
Athlon 64大有用武之地。那么,对于电脑游戏,CPU的哪些因素决定
着实际性能的发挥呢?首先,在场景转换时,CPU必须能有效的判断并
扣除那些不可见的渲染元素。其次,CPU需要和图形加速器进行的快
速数据交换,英特尔处理器较高的主频和系统总线频率将更加有助于
实现这一点。对于游戏引擎而言,AMD似乎更占据主动。它的Athlon处
理器在分支(branching)处理上优势明显。3D Now!在几何建模时也
能提供方便快速的指令。与AMD Athlon 64 需要对现存的程序重新编
译不同,3D Now!的优化将有计算机自动完成,而无需再劳繁软件开
发者。 试想一下,如果英特尔在Prescott上没有新的扩展指令集问
世, 我们当然更应看好AMD的Athlon 64, 至少Athlon 64看起来更为
完美。但是考虑到Intel来势汹汹的新的扩展指令集,现在下结论似
乎为时尚早。

  英特尔为程序开发商提供优化程序库,这让自己的技术得以迅
速流行,我们看到,AMD也会加以效仿,来推广自己的x86-64架构。

  此外,有谣言称,一旦x86-64架构证明可行,Intel也将在
Prescott中使用x86-64架构。这看上去有点荒诞:我们目前还看不
出Intel有这样的意图。另一方面,AMD已经推迟了Athlon 64发布,
这使它有可能加入最新的Prescott扩展指令。如果这样的话,那么
AMD的处理器也可以很好的执行Prescott优化代码,这在技术上实
现并不会有太大问题,AMD处理器对于3D Now!的灵活操作也已经由
来已久。

  我们希望AMD在CPU扩散指令集上不会被动太久,在SSE2成为扭
转战局的主力后,面对即将开始的新一轮竞争,扩散指令集对胜负
的影响已经不言自明。


--
提供刻录服务,带CD盒每张4元,全部用BENQ。
上传到192.168.39.98用户upload密码408
工作时间为周一至周五中午和晚上,周六日休息。

※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.39.98]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店