九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
主流處理器中的數(shù)據(jù)并行支持(SIMD)

前瞻-主流處理器中的數(shù)據(jù)并行支持(SIMD)

引言部分:

多媒體處理算法應(yīng)用在很多媒體處理環(huán)境中,如對(duì)文本,手寫(xiě)數(shù)據(jù),2D/3D圖形和音頻對(duì)象的捕捉、制造、存儲(chǔ)和傳輸?shù)?。過(guò)去 都是使用昂貴的多媒體處理硬件協(xié)同工作來(lái)加速?,F(xiàn)在,通用處理器通過(guò)在體系結(jié)構(gòu)上增加媒體處理支持來(lái)減少使用協(xié)同處理器分配和返回帶來(lái)的開(kāi)銷(xiāo)。在通用處理 器上一個(gè)基本的操作能同時(shí)作用多個(gè)元素的支持成為SIMD并行處理。通過(guò)SIMD擴(kuò)展,通用護(hù)理器通過(guò)捕捉多媒體算法中潛在的并行特性來(lái)加速應(yīng)用。

自 Intel在Pentium II和Pentium 處理器引入了MMX技術(shù)以來(lái),IA-32架構(gòu)已經(jīng)引入了許多SIMD擴(kuò)展,分別是:MMX,流SIMD擴(kuò)展(SSE), 流SIMD擴(kuò)展(SSE2)和流SIMD擴(kuò)展(SSE3),SSSE3,SSE4和高級(jí)向量擴(kuò)展(AVX).這些擴(kuò)展都提供了一組指令,能夠?yàn)榉庋b好的整點(diǎn)或浮點(diǎn)數(shù)據(jù)提供SIMD類(lèi)型的操作。其他結(jié)構(gòu)也 有自己的SIMD擴(kuò)展。如AMD的3DNow!,Cell和PowerPC的AltiVec等等。
可惜的是,和CPU提供的其他技術(shù)一樣,多媒體 指令系統(tǒng)擴(kuò)展的潛能并沒(méi)有完全的發(fā)揮出來(lái)。目前,已經(jīng)有一些論文在倡導(dǎo)科學(xué)家,軟件開(kāi)發(fā)人員使用這些指令加速程序。
這篇評(píng)論試圖更深入的介紹 Intel的SIMD擴(kuò)展,回顧努力使用這些擴(kuò)展的一些研究,討論阻礙多媒體擴(kuò)展廣泛應(yīng)用的問(wèn)題,并試圖給出一些針對(duì)行的解決方法,和潛在的性能提升點(diǎn)。

SIMD 技術(shù):

SIMD是最早提出的并行處理模式之一,也是最簡(jiǎn)單最普遍的并行方法,試圖用一個(gè)指令對(duì)數(shù)據(jù)集合中的每個(gè)數(shù)據(jù)作相同的操作。如下 圖所示:

單指令流多數(shù)據(jù)流模型

雖然SIMD技術(shù)還沒(méi)有廣泛應(yīng)用,但也沒(méi)有完全小時(shí)。因?yàn)镾IMD擴(kuò) 展對(duì)于特定的應(yīng)用仍然很有意義,這些應(yīng)用的特點(diǎn)是本身有并行的任務(wù),需要大量的獨(dú)立數(shù)據(jù)運(yùn)算,包括3D圖形運(yùn)算,圖像處理,語(yǔ)音識(shí)別,科學(xué)計(jì)算,數(shù)據(jù)庫(kù)查 詢(xún)等。

MMX技術(shù):

MMX是在第五代奔騰處理器中作為附加擴(kuò)展引入的,最早用在提升圖像生成,加密,視頻編解碼和I/O處理 上,相對(duì)于無(wú)MMX技術(shù)的處理器,通常能帶來(lái)1.5到2倍的加速.MMX能處理64位封裝的整型,引入了8個(gè)64位寄存器來(lái)實(shí)現(xiàn)、四種MMX數(shù)據(jù)類(lèi)型(封 裝的字節(jié),半字,字,雙字)和57條MMX指令.
8個(gè)MMX寄存器是通用寄存器,是浮點(diǎn)寄存器(ST0-ST7)的低64位的重用.MMX的數(shù)據(jù) 類(lèi)型可以是8個(gè)字節(jié)整型元素的數(shù)組,4個(gè)半字整型元素的數(shù)組,2個(gè)字整型元素的數(shù)組或者1個(gè)雙字整數(shù).做SIMD運(yùn)算時(shí),SIMD指令取兩個(gè)MMX寄存器 中的操作數(shù),作相應(yīng)的SIMD運(yùn)算,并將結(jié)果存入結(jié)果寄存器中。MMX的指令系統(tǒng)由57條指令構(gòu)成.包括基本算術(shù)操作、比較操作、轉(zhuǎn)換操作、邏輯操作、移 位操作、訪存及寄存器間移動(dòng)操作和狀態(tài)指令。因?yàn)镸MX寄存器復(fù)用浮點(diǎn)寄存器,必要時(shí),需要對(duì)MMX寄存器清空以便正常的浮點(diǎn)運(yùn)算可以進(jìn)行。
MMX 引入了一種新的溢出方式:飽和溢出(Saturation overflow).傳統(tǒng)的溢出很多都是反轉(zhuǎn)溢出(wraparound overflow).對(duì)于反轉(zhuǎn)溢出,即溢出高位。但對(duì)于圖像處理,這樣做就不合適,比如兩個(gè)白色的像素點(diǎn)相加,因?yàn)橐绯?,取低位,可能?huì)是一個(gè)黑色的點(diǎn), 顯然和實(shí)際不符。飽和移除就是為解決這個(gè)問(wèn)題,即若溢出則保留最值,而不是簡(jiǎn)單的取最低的幾位。MMX提供有符號(hào)和無(wú)符號(hào)兩種飽和溢出。

流 SIMD擴(kuò)展技術(shù)(SSE)

SSE在Intel 奔騰III中引入,作MMX技術(shù)的升級(jí),并保持向后兼容。SSE擴(kuò)展包括增加對(duì)128位寄存器內(nèi)封裝的或者普通的單精度浮點(diǎn)值的操作。SSE擴(kuò)展引入了一 個(gè)新數(shù)據(jù)類(lèi)型:128位封裝單精度浮點(diǎn)類(lèi)型,有4個(gè)IEEE標(biāo)準(zhǔn)的32位單精度浮點(diǎn)類(lèi)型組成.該單精度數(shù)可以在XMM寄存器內(nèi)或者主存中。SSE引入5類(lèi) 新寄存器:XMM寄存器:8個(gè)128位寄存器支持單精度運(yùn)算(XMM0-XMM7),能被x87 FPU,MMX寄存器或通用寄存器訪問(wèn);MXCSR寄存器:32位寄存器包含SIMD浮點(diǎn)操作的控制和狀態(tài)信息;MMX寄存器:用于64位封裝整型,或者 為某些在MMX和XMM寄存器之間運(yùn)算的操作提供操作數(shù);通用寄存器:因?yàn)镸MX和XMM寄存器不能用于存地址,8個(gè)32位的通用寄存器就被引入用于保存 SSE模式下的操作數(shù)的存儲(chǔ)地址;EFLAGS寄存器:用于記錄某些比較結(jié)果的32位寄存器.
SSE也引入了70條新指令,可以分為4 類(lèi):SIMD單精度浮點(diǎn)運(yùn)算;MXCSR狀態(tài)管理指令;64位SIMD整點(diǎn)指令(擴(kuò)展原MMX指令集);cache控制,預(yù)取和取值指令。
目前很 多的圖形軟件采用了這項(xiàng)技術(shù),如Adobe Photoshop會(huì)在有SSE擴(kuò)展的機(jī)器上用SSE加速,微軟也在DirectX 6.1和之后的音/視頻驅(qū)動(dòng)中加入了SSE,這些都已經(jīng)包含在Windows 98,Me,2000,NT和XP。

流SIMD擴(kuò)展技術(shù) 2(SSE2)

SSE2在奔四和Xeon處理器中引入,SSE2允許更多的計(jì)算并行,并擴(kuò)展了MMX和SSE中的指令,而且引入了兩個(gè)雙精度浮 點(diǎn)數(shù)據(jù)類(lèi)型。具體引入特性如下:六中數(shù)據(jù)類(lèi)型、支持新數(shù)據(jù)類(lèi)型的指令和對(duì)已有SIMD整型操作的擴(kuò)展、修改已有指令以便支持SSE2.
雙精度 SIMD運(yùn)算的支持增強(qiáng)了在XMM寄存器上作高精度計(jì)算的能力。SSE2也讓XMM寄存器可以作128封裝整型的運(yùn)算?,F(xiàn)在程序員可以使用完備的SIMD 寄存器、數(shù)據(jù)類(lèi)型和指令來(lái)開(kāi)發(fā)混合單/雙精度浮點(diǎn),64位/128位整點(diǎn)的數(shù)據(jù).SSE2并沒(méi)有引入新的寄存器,只是做了功能擴(kuò)展。

流 SIMD擴(kuò)展技術(shù)3(SSE3,SSSE3)

SSE3在奔騰四為了支持超線程而引入。SSE3擴(kuò)展包括13條新指令.SSE3并沒(méi)有引入新的數(shù)據(jù)類(lèi)型和寄存 器.

SSSE3在Intel Core架構(gòu)中引入,增加了16條指令,每條指令都能在64位的MMX寄存器或128位的XMMS寄存器上運(yùn)算

流 SIMD擴(kuò)展技術(shù)4(SSE4)

SSE4 2006年9月發(fā)布,AMD k10和Intel Core中有使用,包括54條新指令。SSE4中增加了并非特定于多媒體應(yīng)用的指令,如STTNI指令可以加速文本和字 符串處理;ATA能加速冗余校驗(yàn)。

流 SIMD擴(kuò)展技5(SSE5)

SSE5是AMD 2007年8月發(fā)布的,作為AMD64結(jié)構(gòu)在128 SSE基礎(chǔ)上的補(bǔ)充。

高級(jí)向量擴(kuò)展 (AVX)

Intel 2008年3月發(fā)布的SIMD擴(kuò)展.寄存器從128位擴(kuò)展為256位,并使用新的寄存器名YMM0-YMM15,已有的128位指令使用256位寄存器的 低128位.使用無(wú)副作用指令格式,即所有形如a=a+b的操作都會(huì)會(huì)被替換為c=a+b,這樣操作數(shù)計(jì)算的結(jié)構(gòu)不會(huì)污染原操作數(shù),所有的有兩個(gè)操作數(shù)的 XMM指令都會(huì)用這種方式擴(kuò)展為3個(gè)操作數(shù)的形式.訪存中對(duì)SIMD數(shù)據(jù)對(duì)齊的要求放寬。
AVX中指令的編碼方式也有改變,通過(guò) 修改前綴使得無(wú)副作用指令格式得意實(shí)現(xiàn)。AVX擴(kuò)展適用于多媒體、科學(xué)計(jì)算和經(jīng)濟(jì)方面的應(yīng)用,能有效增加并行性和浮點(diǎn)SIMD運(yùn)算的吞吐率,降低寄存器載 入開(kāi)銷(xiāo)。目前Linux 2.6.30、Windows 7 SP1和Windows Server 2008 R2 SP1都有AVX增強(qiáng).

3DNow!技術(shù)

3DNow!是AMD在MMX的基礎(chǔ)上作的擴(kuò)展,和SSE對(duì)MMX的擴(kuò)展相似。最早用在 AMD-K6-2處理器上,之后在AMD-K6-III和AMD Athlon處理器上實(shí)現(xiàn)。3DNow!是一組指令,有效緩解了傳統(tǒng)多浮點(diǎn)運(yùn)算和多媒體應(yīng)用的瓶頸。3DNow!使用MMX寄存器但增加了45條浮點(diǎn)指 令,能同時(shí)對(duì)1個(gè)或2個(gè)單精度浮點(diǎn)值作運(yùn)算.3DNow!支持加、減、乘、除、和整點(diǎn)之間的轉(zhuǎn)換、比較、絕對(duì)值、數(shù)據(jù)預(yù)取等操作。根據(jù)AMD提供的資 料,3DNow!的帶來(lái),如同SSE為MMX帶來(lái)的同等提升,但指令和復(fù)雜度降低。但SSE和3DNow!不兼容。目前微軟的Windows 9X,NT和所有最新系統(tǒng),DirectX 6.x可以使用3DNow!加速,OpenGL也可以使用3DNow!加速.
3DNow!為高分辨率的顯示提高了幀頻率,更接近 現(xiàn)場(chǎng)的高保真音頻等等。

小小結(jié):

操作系統(tǒng)對(duì)某個(gè)體系結(jié)構(gòu)的支持,已經(jīng)遠(yuǎn)遠(yuǎn)不是單純的某個(gè)指令集能解決的問(wèn)題。為了用戶(hù)體驗(yàn)和應(yīng)用性能提升,需要更多的軟/硬件協(xié)同的設(shè)計(jì)。軟件設(shè)計(jì)中需要哪條指令更高效的運(yùn)行,哪些指令用不到,都可以給硬件設(shè)計(jì)作參考。這也是Wintel聯(lián)盟如此緊密的原因。與CPU架構(gòu)密切相關(guān)的SIMD指令,作為改進(jìn)普通中端用戶(hù)多媒體體驗(yàn)的關(guān)鍵,更是在Windows系統(tǒng)中占據(jù)不可替代的作用。

在Gentoo portage中做了個(gè)簡(jiǎn)單的調(diào)研,發(fā)現(xiàn)現(xiàn)在使用SIMD加速的包很少,如mplayer,ffmpeg,gimp,大多數(shù)都為多媒體應(yīng)用程序,支持最多的也只有sse,sse2,3DNow和mmx,再新的根本沒(méi)有。而且Intel等芯片設(shè)計(jì)廠商也有一些未公開(kāi)的特殊指令,只提供給某些合作伙伴使用,再加上開(kāi)源愛(ài)好者們沒(méi)有那么多的時(shí)間和精力去根據(jù)已有的程序和算法,按照某個(gè)芯片獨(dú)特的SIMD支持,設(shè)計(jì)并驗(yàn)證針對(duì)它的軟件修改。那很多開(kāi)源軟都難用到這些特性。性能也就沒(méi)辦法和Windows下的相比。

這小小結(jié),只是憤青的一點(diǎn)感慨而已。既得利益集團(tuán)是不會(huì)在乎這些的。

敬請(qǐng)期待SIMD系列下文《前瞻-拿起SIMD的武器!》

PS:原文根據(jù)ayaya的評(píng)論做了很多更正,謝謝ayaya:)

參考:
A Review of SIMD Multimedia Extensions and their Usage in Scientific and Engineering Applications.

http://en.wikipedia.org/wiki/Streaming_SIMD_Extensions

http://en.wikipedia.org/wiki/SSSE3

http://en.wikipedia.org/wiki/SSE4

http://en.wikipedia.org/wiki/SSE5

http://en.wikipedia.org/wiki/Advanced_Vector_Extensions

http://en.wikipedia.org/wiki/CVT16_instruction_set

0

相關(guān)文章:

6 thoughts on “前瞻-主流處理器中的數(shù)據(jù)并行支持(SIMD)

  1. 這篇很多疑問(wèn)啊。

    >自 Intel在Pentium II引入了MMX技術(shù)以來(lái)

    MMX 是從 Pentium 開(kāi)始引進(jìn)的,我親身用過(guò) Pentium MMX 166MHz。

    >IA-32架構(gòu)已經(jīng)引入了4類(lèi)SIMD擴(kuò)展,分別是:MMX,流SIMD擴(kuò)展(SSE), 流SIMD擴(kuò)展(SSE2)和流SIMD擴(kuò)展(SSE3)

    你下面寫(xiě)有 Intel 的 SSE4 / AVX,AMD 的 SSE5 啊。個(gè)人認(rèn)為即使 SSE4/SSE5 不夠資格單獨(dú)成一類(lèi),但 AVX 絕對(duì)是要獨(dú)立的。

    >補(bǔ)集

    感覺(jué)補(bǔ)集在集合論里有專(zhuān)門(mén)的意思,是如果 Extension 一般譯成擴(kuò)展。

    >目前微軟的Windows 9X,NT和所有最新系統(tǒng),DirectX 6.x都支持3DNow!
    Win 9X / WinNT 這些系統(tǒng)能夠跑在 Pentium 上,它們本身應(yīng)該是沒(méi)有用到 3DNow! 指令的。由于操作系統(tǒng)要照顧到非常低端的 CPU,一般會(huì)大大限制允許使用的指令集,比如把 Pentium 4 當(dāng)成一個(gè)很快的 Pentium 用。Intel 的 CPU 從來(lái)沒(méi)有實(shí)現(xiàn)過(guò) 3DNow!,相信操作系統(tǒng)是不會(huì)去用 AMD 的這套東西,否則不能運(yùn)行在 Intel 平臺(tái)上會(huì)被罵死。

    不知這里“支持”是什么意思。運(yùn)行在系統(tǒng)上的應(yīng)用程序可以利用較新的指令,但只能說(shuō)應(yīng)用程序支持,不能說(shuō)系統(tǒng)支持吧。

    >OpenGL也支持.
    非 x86 平臺(tái)不講,OpenGL 本身是個(gè)標(biāo)準(zhǔn),無(wú)所謂支不支持 3DNow! (或者 SSE/2/3) 等指令集。我記得很早以前 SGI 有一個(gè)超古老的 OpenGL 低版本實(shí)現(xiàn)使用了 3DNow!,但很多實(shí)現(xiàn)是沒(méi)有用到 3DNow! 的,Win98 自帶的就沒(méi)有。

    事實(shí)上由于 AMD 太弱勢(shì),據(jù)我所知,這公司的標(biāo)準(zhǔn)基本沒(méi)人理,除了 AMD64 這個(gè)大殺器。

    >在Gentoo portage中做了個(gè)簡(jiǎn)單的調(diào)研,發(fā)現(xiàn)使用到SIMD加速的包很少,幾乎都是多媒體引用的
    >因?yàn)镾IMD擴(kuò) 展對(duì)于特定的應(yīng)用仍然很有意義,這些應(yīng)用的特點(diǎn)是本身有并行的任務(wù),需要大量的獨(dú)立數(shù)據(jù)運(yùn)算

    這兩句有點(diǎn)矛盾吧。

    目前想要有效地使用 SIMD 加速,還是需要手工寫(xiě)匯編,這本身就大大限制了它的普及。而且 SIMD 這個(gè)操作模式多媒體比較適合。比如顏色的 RGB 三個(gè)分量正好放到 X0,X1,X2 寄存器,兩個(gè)顏色混合就 XMM0 + XMM1 一次搞定,等等。

    >如果Intel等芯片設(shè)計(jì)廠商不公布一些用于加速的性能細(xì)節(jié)

    我覺(jué)得 Intel 的芯片手冊(cè)已經(jīng)挺詳細(xì)了,規(guī)范和范例都很好啊,推廣 SSE2 很用功的。CPU 的開(kāi)放程度比 GPU 強(qiáng)太多了。

    Windows 平臺(tái)使用 SIMD 的程序也很少啊。而且既然用 Gentoo,可以 /etc/make.conf 里設(shè)置讓編譯器自動(dòng)使用 CPU 支持的全部可用指令集,只要 gcc 爭(zhēng)氣,比 Windows 還強(qiáng)呢。

    >如果開(kāi)源愛(ài)好者們沒(méi)有那么多的時(shí)間和精力去根據(jù)已有的程序和算法,按照某個(gè)芯片獨(dú)特的 SIMD支持,設(shè)計(jì)并驗(yàn)證針對(duì)它的軟件修改

    開(kāi)源社區(qū)缺乏足夠的資源,這個(gè)不能怪 Intel/AMD 吧 :)

    >這小小結(jié),只是憤青的一點(diǎn)感慨而已。既得利益集團(tuán)是不會(huì)在乎這些的。

    我也用 Gentoo,但出于以上理由,覺(jué)得這個(gè)結(jié)論是想當(dāng)然的,有偏見(jiàn)的。

    • 1,抱歉,是我的翻譯疏忽。原文是”Beginning with the Pentium II and Pentium with Intel MMX technology processor families, four extension…”,這段剛開(kāi)始翻譯時(shí),沒(méi)怎么讀懂,就直接取了最晚發(fā)布的Pentium II,沒(méi)有提Pentium,已更正。
      2,SSE3之后的SIMD擴(kuò)展是我根據(jù)維基百科的內(nèi)容,添加上去的,這篇論文因?yàn)榘l(fā)布的較早,所以沒(méi)有提到這些。所以某些地方?jīng)]有改過(guò)來(lái), 已更正:)
      3,這個(gè)是翻譯的錯(cuò)誤,SSE5的介紹來(lái)自維基百科,原詞為”supplement”,已更正。
      4,表達(dá)的不準(zhǔn)確,原意是想說(shuō) Direct 6.X也可以使用3DNow!做加速,這樣在AMD的CPU上有性能提升。至于不支持3DNow!的CPU,也可以使用通用的方式運(yùn)行,已修改。
      5,這個(gè)也是我表達(dá)不準(zhǔn)確,應(yīng)該是OpenGL也可以使用3DNow!加速(http://www.amd.com/us-en/Corporate/VirtualPressRoom/0,,51_104_557_560,00.html),已修改。AMD的很多技術(shù)確實(shí)比不上財(cái)大氣粗的Intel。
      6.這兩句是不矛盾的,一個(gè)說(shuō)現(xiàn)實(shí)中已經(jīng)使用SIMD擴(kuò)展加速的程序,一個(gè)說(shuō)理論上哪些程序可以使用SIMD加速,修改了一下原文,表述更精確些。SIMD加速確實(shí)很不容易做。手寫(xiě)匯編很頭疼,不過(guò)編譯器還提供了一些SIMD 函數(shù)調(diào)用及向量數(shù)據(jù)類(lèi)型支持(http://ds9a.nl/gcc-simd/),用起來(lái)方便很多,不過(guò)怎么初始化向量數(shù)據(jù)還是很頭疼,還有數(shù)據(jù)對(duì)齊之類(lèi)的問(wèn)題要考慮:).
      7,很多CPU確實(shí)有某些未完全公開(kāi)的指令(http://rram.spaces.eepw.com.cn/articles/article/item/77220).Windows平臺(tái)因?yàn)椴挥锰峁┰创a,所以用戶(hù)沒(méi)辦法知道有沒(méi)有用SIMD,但我覺(jué)得至少很多顯卡聲卡驅(qū)動(dòng),還有文中提到的Photoshop肯定會(huì)有的。/etc/make.conf里設(shè)置use也得源碼包支持這些use才行。Gcc都基本是一些商業(yè)公司在支持了,GCC AVX的patch都是intel的人做的(http://gcc.gnu.org/ml/gcc-patches
      /2009-01/msg00226.html),所以Intel不給這些人發(fā)錢(qián),這些人也沒(méi)有時(shí)間和精力提交這種patch。大家都想周六周日陪陪老婆孩子,出去野餐度假什么的:)

      最后,非常感謝你提出的修改意見(jiàn):)

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶(hù)發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
關(guān)于NEON的一些總結(jié)
處理器的大腦 讀懂CPU指令集
在C/C++代碼中使用SSE等指令集的指令(3)SSE指令集基礎(chǔ)
核心指令集發(fā)展回顧
CPU指令集的誕生、發(fā)展、分類(lèi)及對(duì)處理器性能提升的作用
從Pentium III到扣肉 SSE指令集發(fā)展歷程回顧
更多類(lèi)似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服