程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> Pentium III處理器的單指令多數據流擴展指令(1)

Pentium III處理器的單指令多數據流擴展指令(1)

編輯:關於C++

關鍵字 :

Pentium,處理器,單指令多數據流擴展指令,SSE,指令集

概要 :

隨著Intel Pentium III處理器的發布,給程序設計人員又帶來了許多新的特性。利用這些新特性,程序員可以為用戶創造出更好的產品. Pentium III和Pentium III Xeon(至強處理器)的許多新特性,可以使她能夠比Pentium II和Pentium II Xeon處理器有更快的運行速度,這些新特性包括一個處理器序列號(unique processor ID)和新增SSE處理器指令集,這些新的指令集就像Pentium II在經典Pentium的基礎上添加的MMX指令集.

在這篇文章裡,我們將向你展示Pentium III處理器和她的這些新特性,並且將著重講述Pentium III處理器的新指令集.

1.Pentium III處理器概要

1999年2月,Intel發布了她的最新款處理器Pentium III處理器,和以往的新處理器推出一樣,速度的提高是最主要的性能改善.Intel在發布她的新處理器時一貫遵循著摩爾定律,即每過18個月處理器的速度將提高一倍(the processor speed doubles every 18 months),但是Pentium III處理器的並沒有比Pentium II的速度提高一倍,在Pentium II和Pentium II Xeon處理器運行在333MHz~400MHz時,Pentium III也只不過運行 在450MHz~550MHz而已,處理器的速度並沒有多大的提高,但是性能的提升確是很明顯的.

從本質上說,Pentium III處理器只不過是一個運行在更高速度的Pentium II處理器,另外再增加了一些新的指令集:Streaming SIMD Extensions(單指令多數據流擴展指令集,或者稱為SSE).這些新指令集的增加並不會影響原來的程序運行,因為Pentium III處理器采用的是完全兼容於原來Pentium II處理器的IA-32構架.

如果Pentium III處理器的速度並沒有比Pentium II有倍速的提高,那我們為什麼還要去選購她呢?

2.Pentium III處理器的新特性

Pentium III處理器添加了兩個有趣也是很有用的新特性:處理器序列號(processor serial number)和SSE指令集.由於Pentium III處理器的序列號涉及到用戶隱私的爭議,為了避免這種爭議,在這裡我們將把注意力放在Pentium III處理器的SIMD新指令集上.

SSE包含一個SIMD的首字母,SIMD是Single Instruction Multiple Data(單指令多數據)的首字母的縮寫.通常,處理器在一個指令周期只能處理一個數據,這叫做Single Instruction Single Data(單指令單數據),縮寫為SIDI.和SIDI不同的是,如果處理器具有SIMD能力,那麼她就可以在一個CPU指令周期同時處理多個數據.

3.MMX vs SSE

MMX和SSE都是在原來的處理器指令集的基礎上添加的擴展指令集,都是SIMD(單指令多數據)指令,不同的是他們處理的數據類型不同. MMX只能在整數上支持SIMD,而SSE指令增加了單精度浮點數的SIMD支持.MMX可以進行同時對2個32位的整數操作,而SSE可以同時對4個32位的浮點數操作.

MMX和SSE的一個主要的區別是MMX並沒有定義新的寄存器,而SSE定義了8個全新的128位寄存器,每個寄存器可以同時存放4個單精度浮點數(每個32位長),他們在寄存器中排列順序見下圖1.

圖一:新數據類型排列

這裡有一個問題,既然MMX沒有定義新的寄存器,那麼她又有什麼寄存器可操作呢?事實上,MMX是和原來的浮點寄存器共享的.一個浮點寄存器是80位長的,她的低端64位被用做MMX的寄存器.這樣,一個應用程序就不能在執行MMX指令的同時進行浮點操作了.同時,處理器還要花掉大量的時鐘周期去維護寄存器狀態從MMX操作和浮點操作之間的切換.SSE指令集就沒有這些限制了.由於她定義了全新的寄存器,應用程序可以在進行整數SIMD操作(MMX)的同時進行浮點數的SIMD操作(SSE),同樣,SSE還可以在執行浮點數的非SIMD操作的同時進行SIMD操作.

MMX和SSE的寄存器排列見下圖2.圖2(a)是MMX和浮點數共享一個寄存器的情況,圖2(b)是SSE的獨立寄存器排列.

圖二:MMX和SSE的寄存器

MMX和SSE寄存器有一個共同點,那就是都有8個寄存器.MMX的寄存器被命名為mm0~mm7,SSE的寄存器名字是xmm0~xmm7.

4.程序中的應用

Pentium III的SSE指令集是為SIMD設計的,她可以同時操作4個單精度浮點值.因此,利用這些加強的浮點計算能力,對3D應用程序的細節表現是有實質性的提高的.事實上,SSE就是為3D應用創建的.游戲和其他的使用後端3D來顯示2D和2.5D圖象的程序,和使用矢量圖形的應用程序一樣都能分享到這種好處.

4.1 3D運算

計算機表示的3D圖形是用大量的表示圖形頂點的浮點數組成的,通過操作這些頂點數據就可以改變3D圖形的外觀.通過使用SSE指令集,應用程序可以獲得更多的幫助,處理器可以在一個時鐘周期內處理更多的數據,大大加快了3D圖形的頂點計算速度,可以給用戶帶來更深刻的3D體驗.

同樣,應用程序開發者還可以用更多的頂點數據和更復雜的算法來創造出更為生動的3D圖象效果來.

使用SSE指令集可以顯著的改善一些在3D操作中經常用到的計算,像矩陣乘法、矩陣變換以及矩陣之間的加、減、乘、向量矩陣相乘、矢量化、 矢量點相乘和光照計算等等.

5.單指令多數據流指令集

SSE增加了70條新的指令,同時也添加了一個狀態/控制字(status/control word).SSE指令集必須要得到操作系統的支持,支持她的操作系統必須能夠保存和恢復這個處理器的狀態字.目前,只有Microsoft的Windows98和Windows2000支持SSE指令集.SSE定義了新的指令、新的數據類型和指令范疇.

這些新添加的指令不是全部用來浮點數SIMD操作的,在這70條新指令中,有50條是浮點數的SIMD操作的,12條是針對整數的SIMD操作的,還有8條是cache操作(cacheability )指令.在這篇文章裡,我們將著重討論這50條浮點數的SIMD操作指令.

5.1 分類

Pentium III的SIMD新指令集可以按照不同的分類標准得到不同的分類方法.

如果我們按照指令的操作數劃分,可以得到"數據包裝"(Data Packing)的分類方法.

如果按照指令的動作特征劃分,可以得到"指令范疇"(Instruction Categories)分類方法.

如果按照指令的計算特征劃分,可以得到"指令分組"(Instruction Groups)分類方法.

5.1.1 數據包裝分類

如果我們按照指令的操作數劃分浮點數的SIMD部分,我們可以得到兩個明顯的分類:操作包裹數據(packed data)的指令和操作標量數據(scalar data)的指令.因此,我們可以得到包裹指令(packed instructions )和標量指令(scalar instructions)這兩個種類.

在Pentium III指令集中,包裹指令和標量指令可以很方便的被區分出來.包裹指令的都帶有"ps"前綴,而標量指令有一個"ss"前綴. SSE還定義了一個新的數據類型(data type),可以用來儲存4個單精度浮點數,這個新的數據類型可以用下面的圖3來表示.圖中的元素"A"包含了4 個單精度浮點數a0,a1,a2,a3.

圖三:SSE的新數據類型

上面的圖三可以幫助我們理解包裹指令和標量指令之間的區別.SSE的包裹指令同時操作這個新數據類型的4個元素,而標量指令只操作這個新數據類型的最後一個元素,其他三個元素的內容將在指令執行前後保持不變.

圖4說明了包裹指令的操作方法.如圖所示,有兩個操作數A和B,都是SSE定義的新數據類型.操作結果將被保存在數據C.C和A、B是一樣的數據類型.操作數A有四個組成元素a0,a1,a2,a3,同樣操作數B也有四個元素b0,b1,b2,b3.下圖中的op是要進行的操作指令.

圖四:包裹操作

操作指令是被分別作用於A和B的四個元素的,操作結果將被放在C的相應元素中.指令op是在同一個時間對這四個元素操作的,並在同一個計算單元中進行計算.

一個標量指令使用和上面一樣的操作指令op,操作數A和B,如下圖5示例說明.在這裡操作指令只作用於操作數A和B的最後一個元素.同樣,結果只儲存在C的相應最後一個元素中.還有,在這裡雖然只有一個元素被改變,操作指令op仍然同時操作所有的4個元素,並且也是在一個計算單元中進行的.

圖五:標量操作

5.1.2 指令范疇分類(按照指令動作類型劃分)

SSE指令集中幾乎所有的包裹指令都有一個標量指令和她對應.SSE指令也可以不按操作數分類,而是把她分成下面的幾個類:

· 計算指令(computation instructions)

· 分支指令(branching instructions)

· Cache指令(cacheability instructions)

· 數據移動和排序指令(data movement and ordering instructions)

5.1.3 指令組分類(按照指令計算特征分類)

SSE指令還可以被分成下面的幾類:

· 算術指令(arithmetic instructions)

· 比較指令(comparison instructions)

· 邏輯指令(logical instructions)

· 清洗指令(shuffle instructions)

· 轉換指令(conversion instructions)

· 狀態操作指令(state management instructions)

· Cache指令(cacheability instructions)

· 數據操作指令(data management instructions)

· 附加整數指令(additional integer instructions)

5.2 優點

SSE最主要的優點是可以大大減小數據計算的指令操作數目.如果不使用SIMD和SSE,要進行一個400次的浮點數乘法計算,需要循環使用400次的乘法指令.而如果使用了SIMD和SSE,則只要進行100次的乘法指令就可以完成相同的任務了,因為這裡每次的乘法操作都可以同時對4個浮點數進行計算.

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved