技术文档(Document)
作者:
基于 SSE 指令集的程序设计简介
SSE 技术简介
公司的单指令多数据流式扩展(,)
技术能够有效增强 浮点运算的能力。 ! 提供了对
指令集的编程支持,从而允许用户在 ""代码中不用编写汇编代码就可直接使用
指令的功能。 中有关 技术的主题#$%有可能会使不熟悉使用 汇
编指令编程的初学者感到困惑,但是在阅读 有关文档的同时,参考一下
软件说明书(&')#%会使你更清楚地理解使用 指
令编程的要点。
SIMD(single-instruction, multiple-data)是一种使用单道指令处理
多道数据流的 CPU 执行模式,即在一个 CPU 指令执行周期内用一道指令完成处理
多个数据的操作。考虑一下下面这个任务:计算一个很长的浮点型数组中每一个元
素的平方根。实现这个任务的算法可以这样写:
(((&)*&+,,对数组中的每一个元素
(((&-./&0,,计算它的平方根
为了了解实现的细节,我们把上面的代码这样写:
(((&)*&+
(((1
(((((((把 & 从内存加载到浮点寄存器
(((((((计算平方根
(((((((再把计算结果从寄存器中取出放入内存
(((2
具有 指令集支持的处理器有 3 个 $3 位的寄存器,每一个寄存器可以存
放 4 个(! 位)单精度的浮点数。 同时提供了一个指令集,其中的指令可以允
许把浮点数加载到这些 $3 位的寄存器之中,这些数就可以在这些寄存器中进行算
术逻辑运算,然后把结果放回内存。采用 技术后,算法可以写成下面的样子:
(((&)*4+,,对数组中的每 4 个元素
(((1
(((((((把数组中的这 4 个数加载到一个 $3 位的 寄存器中
(((((((在一个 指令执行周期中完成计算这 4 个数的平方根的操作