SSE3








SSE3與其他x86架構所用的多媒體指令集,在指令數目上的比較圖


SSE3(Streaming SIMD Extensions 3),又稱PNI(Prescott New Instructions)[1],它指的是:在原有架構的處理器中,所第三次額外新增、添加的多媒體指令集,之前的兩次分別是SSE、SSE2。


SSE3是Intel公司所其原有IA-32架構的處理器所研創,並在2004年初的新款Pentium 4(P4E,Prescott核心)處理器[2]中使用,之後2005年4月AMD公司也發表具備部分SSE3功效的處理器:Athlon 64(E3步進核心)[3],此後的x86處理器也幾乎都具備SSE3的新指令集功能。


此外,在SSE3提出之前,x86架構的處理器先後已有多種多媒體指令集被提創與使用,先後順序大致是Intel MMX、AMD 3DNow![4]、Intel SSE、Intel SSE2等。


附帶一提的是,SSE3比在它之前的SSE2增加13條新指令。




目录






  • 1 新指令所帶來的改變


  • 2 具備SSE3硬體支援功效的處理器


  • 3 新增的指令


    • 3.1 共通性的指令


    • 3.2 Intel針對SSE3所額外設計的自用指令




  • 4 附註說明


  • 5 參考引據


  • 6 關連條目


  • 7 外部連結





新指令所帶來的改變


SSE3最值得一提的新功效特點,是水平式的暫存器整數運算,而在此之前的SSE、SSE2則僅能垂直運算。更進一步的特點是,指令執行時對多筆數值的同時加法運算、減法運算等,之後將結果進行儲存等,都可以在單一個暫存器完成,因此SSE3可以用更簡單的方式來實現同時間的多筆、大量DSP、3D性質的運算。


此外,有個新指令可將浮點數數值轉換成整數數值,且進行此種轉換不需要將運算切換到rounding模式,過去此類轉換必須先切換至rounding模式,完成轉換後再退出rounding模式,此新指令可省去此模式切換程式,使整體運算更為加速,也因此可避免鄰近執行管線(Instruction pipeline)因此而停緩、等待(模式切換會使後續執行暫停,進而減損運算效能)。


另外,新增設的LDDQU指令能夠在交替載入長度不一的整數向量值時獲得更佳的效能,此指令可以讓Intel NetBurst架構的執行核心跨越快取線的界線而進行數值載入。



具備SSE3硬體支援功效的處理器


以下表列依據業者英文名稱的字母順序:




  • AMD公司:


    • Athlon 64 - 從Stepping E3的Venice(威尼斯,研發代號)以及Stepping E4的San Diego(聖地牙哥,研發代號)開始具備。

    • Athlon 64 X2


    • Athlon 64 FX - 從Stepping E4的San Diego(聖地牙哥,研發代號)開始具備。


    • Opteron - 從Stepping E4的San Diego(聖地牙哥,研發代號)開始具備。


    • Sempron - 從Stepping E3的Palermo(研發代號)開始具備。

    • Turion 64

    • Turion 64 X2

    • Phenom

    • Phenom II




  • Intel公司:

    • Celeron D


    • Pentium 4 - 從Prescott(研發代號)開始具備。

    • Pentium D

    • Intel Core

    • Intel Core 2

    • Intel Core i7


    • Xeon - 從Nocona(研發代號)開始具備。




  • 全美達公司(Transmeta):
    • Efficeon TM88xx(不包含型款編號為TM86xx系列的處理器)



  • 威盛電子(VIA)[5]:

    • VIA Isaiah

    • C7-M

    • C7-D





新增的指令



共通性的指令


算術指令(Arithmetic)


  • ADDSUBPD - (Add-Subtract-Packed-Double)

    • 輸入: - { A0, A1 }, { B0, B1 }

    • 輸出: - { A0 - B0, A1 + B1 }



  • ADDSUBPS - (Add-Subtract-Packed-Single)

    • 輸入: { A0, A1, A2, A3 }, { B0, B1, B2, B3 }

    • 輸出: { A0 - B0, A1 + B1, A2 - B2, A3 + B3 }



陣列結構指令(Array Of Structures;AOS)


  • HADDPD - (Horizontal-Add-Packed-Double)

    • 輸入: { A0, A1 }, { B0, B1 }

    • 輸出: { B0 + B1, A0 + A1 }



  • HADDPS (Horizontal-Add-Packed-Single)

    • 輸入: { A0, A1, A2, A3 }, { B0, B1, B2, B3 }

    • 輸出: { B0 + B1, B2 + B3, A0 + A1, A2 + A3 }



  • HSUBPD - (Horizontal-Subtract-Packed-Double)

    • 輸入: { A0, A1 }, { B0, B1 }

    • 輸出: { A0 - A1, B0 - B1 }



  • HSUBPS - (Horizontal-Subtract-Packed-Single)

    • 輸入: { A0, A1, A2, A3 }, { B0, B1, B2, B3 }

    • 輸出: { A0 - A1, A2 - A3, B0 - B1, B2 - B3 }



  • LDDQU - 如上所述,這是有交替需求時所用的指令,可以載入(load)不整齊排列的整數向量值,此指令對視訊壓縮的運算工作有幫助。

  • MOVDDUP、MOVSHDUP、MOVSLDUP - 此三個指令是針對複雜數目需求時所用,對波形信號的運算有幫助,例如音訊的聲波波形處理。

  • FISTTP - 類似過去x87浮點運算中的FISTP指令,不過此指令的運算執行或忽略掉浮點控制暫存器的rounding(溢繞)模式的設定,並且用“chop”(truncate,截切)模式[6]取代。允許控制暫存器忽略繁重的載入及再載入,例如C語言中將浮點數轉換成整數就需要使用此種截切效果,且此種截切程序已成為C語言中的標準作法。


Intel針對SSE3所額外設計的自用指令


  • MONITOR、MWAIT - 此二個指令能針對多執行緒的應用程式進行執行最佳化,使處理器原有的超執行緒功效獲得更佳的發揮。


附註說明




  1. ^ Prescott是Intel公司為其演進版的Pentium處理器所取的專案代稱,也稱為研發代號。


  2. ^ 研發代號:Prescott。Prescott是地名也是人名,美國、英國、加拿大皆有地方取名為Prescott,另有許多人的姓氏也為Prescott,如William Prescott(美國革命指揮官)、Richard Prescott(美國革命時期的英國將軍,曾兩度被擒)


  3. ^ 研發代號:威尼斯(Venice)與聖地牙哥(San Diego)


  4. ^ 此外也有Cyrix公司提出的EMMI多媒體指令,不過僅短暫提出,之後並未普及使用。


  5. ^ 研發團隊收併自美國IDT公司所100%轉投資的Centaur公司


  6. ^ 所謂rounding模式是暫存器的內存值溢位時,溢位會使內存值歸零再進行持續遞增,舉例而言,一個8-bit的暫存器,當其值為255時,若再加2即會變成1,就二進制來看即是11111111 + 00000010 = 00000001。而所謂chop模式是即便溢位也不歸零,而持續維持在最高數值,此也稱為飽和運算,即是不讓其溢位歸零情事發生,同樣的例子,在chop模式下依舊會維持255,即是11111111 + 00000010 = 11111111。
    當然,截切、飽和忽略了更多的累加值,這在多媒體運算時有其需要,當音調254階再增個2階、3階,若因為溢位歸零而成為0階、1階,就會與255階相去甚遠,相對的254階若因飽和運算的效果最多會維持在255階,255階與254階仍是相近,多媒體運算力求快速即時而不力求精確,因此些許的運算數字結果偏差仍可接受。




參考引據



  • X-bit Labs網站:SSE3指令集(2004年2月1日)(英文)




關連條目




  • SIMD - SSE3指令集的特性原理基礎。

  • SSE

  • 计算机编码


  • SSSE3 - SSE3指令集的擴充



外部連結



  • Intel官方網站對SSE3的總覽說明 (英文)




Popular posts from this blog

Lambaréné

維納斯堡 (華盛頓州)

Mononymous person