SSE4.1基本介紹
SSE4.1加入了6條浮點型點積運算指令,支持單精度、雙精度浮點運算及浮點產生操作,且IEEE 754指令 (Nearest, -Inf, +Inf, and Truncate) 可立即轉換其路徑模式,大大減少延誤,這些改變將對遊戲及 3D 內容製作套用有重要意義。此外,SSE4.1加入串流式負載指令,可提高以圖形幀緩衝區的讀取數據頻寬,理論上可獲取完整的快取快取行,即每次讀取64Bit而非8Bit,並可保持在臨時緩衝區內,讓指令最多可帶來8倍的讀取頻寬效能提升,對於視訊處理、成像以及圖形處理器與中央處理器之間的共享數據套用,有著明顯的效能提升。SSE4.1具體介紹
SSE4.1指令集讓45nm Penryn處理器增加了2個不同的32Bit向量整數乘法運算單元,並加入8位無符號(Unsigned)最小值及最大值運算,以及16Bit及32Bit有符號 (Signed) 運算。在面對支持SSE4.1指令集的軟體時,可以有效的改善編譯器效率及提高向量化整數及單精度代碼的運算能力。同時,SSE4.1改良插入、提取、尋找、離散、跨步負載及存儲等動作,令向量運算進一步專門化。據了解,在進行視頻編碼時需要進行動態預測(Motion Estimation)及差分編碼方式去除相鄰2張影像之相關性,這是一個非常複雜的運算動作。在沒有SSE4.1指令集時,完成一個步驟需要以下指令語句:
for (int moveblock=0;moveblock<16;moveblock++)
for(int line=0; line<16; line++) // Does the 16 pixels large in 4 iteration
{
int i=0;
sum0+=abs( pBlock1[j]-pBlock2)+abs(pBlock1[j+1]-pBlock2[i+1])+abs(pBlock1[j+2]-pBlock2[i+2])+abs(pBlock1[j+3]-pBlock2[i+3]); // Compare with 0 pixel offset
sum1+=abs(pBlock1[j+1]-pBlock2)+abs(pBlock1[j+2]-pBlock2[i+1])+abs(pBlock1[j+3]-pBlock2[i+2])+abs(pBlock1[j+4]-pBlock2[i+3]); // Compare with 1 pixel offset
sum2+=abs(pBlock1[j+2]-pBlock2)+abs(pBlock1[j+3]-pBlock2[i+1])+abs(pBlock1[j+4]-pBlock2[i+2])+abs(pBlock1[j+5]-pBlock2[i+3]); // Compare with 2 pixel offset
sum3+=abs(pBlock1[j+3]-pBlock2)+abs(pBlock1[j+4]-pBlock2[i+1])+abs(pBlock1[j+5]-pBlock2[i+2])+abs(pBlock1[j+6]-pBlock2[i+3]); // Compare with 3 pixel offset
sum4+=abs(pBlock1[j+4]-pBlock2)+abs(pBlock1[j+5]-pBlock2[i+1])+abs(pBlock1[j+6]-pBlock2[i+2])+abs(pBlock1[j+7]-pBlock2[i+3]); // Compare with 4 pixel offset
sum5+=abs(pBlock1[j+5]-pBlock2)+abs(pBlock1[j+6]-pBlock2[i+1])+abs(pBlock1[j+7]-pBlock2[i+2])+abs(pBlock1[j+8]-pBlock2[i+3]); // Compare with 5 pixel offset
sum6+=abs(pBlock1[j+6]-pBlock2)+abs(pBlock1[j+7]-pBlock2[i+1])+abs(pBlock1[j+8]-pBlock2[i+2])+abs(pBlock1[j+9]-pBlock2[i+3]); // Compare with 6 pixel offset
sum7+=abs(pBlock1[j+7]-pBlock2)+abs(pBlock1[j+8]-pBlock2[i+1])+abs(pBlock1[j+9]-pBlock2[i+2])+abs(pBlock1[j+10]-pBlock2[i+3]); // Compare with 7 pixel offset
i=4;
j=moveblock+4;
…
… }
}
一大串的指令極度浪費處理器資源,而在支持SSE4指令集的處理器上,只需要採用4 SAD運算指令:
MPSADBW xmm0,xmm1,0
便完全代替了以上繁複的指令串,大幅提升動態預測(Motion Estimation)及差分編碼的運算速度。