版權(quán)歸原作者所有,如有侵權(quán),請聯(lián)系我們

[科普中國]-英特爾集成性能原語

科學百科
原創(chuàng)
科學百科為用戶提供權(quán)威科普內(nèi)容,打造知識科普陣地
收藏

英特爾集成性能原語(Intel Integrated Performance Primitives,Intel IPP),也可以稱作集成執(zhí)行原語, 是一個多線程軟件函式庫,包含用于多媒體和數(shù)據(jù)處理應用的函數(shù),由英特爾公司開發(fā)的。該庫支持英特爾和兼容處理器,可用于Linux、MacOS、Windows和Android操作系統(tǒng)。它可單獨提供或作為Intel Parallel Studio的一部分使用。

簡介英特爾集成性能原語(Intel IPP)是由因特爾開發(fā)的用于多媒體和數(shù)據(jù)處理的函數(shù)庫。Intel IPP被劃分為四大主要處理組:信號(帶有線性陣列或矢量數(shù)據(jù))、圖像(具有典型顏色空間的2D陣列)、矩陣(用于矩陣運算的nxm數(shù)組)和密碼學。其入口點中一半為矩陣類型,三分之一為信號類型,其余是圖像和密碼類型。Intel IPP函數(shù)分為4種數(shù)據(jù)類型:數(shù)據(jù)類型包括8u (8-bit unsigned)、8s (8-bit signed)、16s、32f (32-bit floating-point)、64f等。Intel IPP包含下列函數(shù):視頻解碼/編碼、音頻解碼/編碼、JPEG/JPEG2000/JPEG XR、計算機視覺、密碼學、數(shù)據(jù)壓縮、圖像顏色轉(zhuǎn)換、圖像處理、光線追蹤和渲染、信號處理、語音編碼、語音識別、字符串處理以及矢量和矩陣數(shù)學。該庫利用處理器的包括MMX、SSE、SSE2、SSE3、SSSE3、SSE4、AVX、AVX2、AVX-512、AES-NI和多核心處理器特性。

多線程與庫多線程(multithreading),是指從軟件或者硬件上實現(xiàn)多個線程并發(fā)執(zhí)行的技術(shù)。傳統(tǒng)操作系統(tǒng)中的單線程進程由進程控制塊和用戶地址空間、以及管理進程執(zhí)行的調(diào)用/返回行為的系統(tǒng)堆?;蛴脩舳褩?gòu)成。如果把進程的管理和執(zhí)行相分離,進程作為操作系統(tǒng)中進行保護和資源分配的單位,允許一個進程中包含有多個可并發(fā)執(zhí)行的控制流,這些控制流切換時不必線程則是指進程中的一條執(zhí)行路徑(控制流),每個進程內(nèi)允許包含多個并行執(zhí)行的路徑,這就是多線程。線程是系統(tǒng)進行處理器調(diào)度的基本單位,同一個進程中的所有線程共享進程獲得的主存空間和資源,線程具有:①一個線程執(zhí)行狀態(tài);②一個受保護的線程上下文;③一個獨立的程序指令計數(shù)器;④一個執(zhí)行堆棧;⑤一個容納局部變量的靜態(tài)存儲器通過進程調(diào)度,通信時可以直接借助于共享的內(nèi)存區(qū),這就形成了多線程進程1。

軟件多線程。即便處理器只能運行一個線程,操作系統(tǒng)也可以通過快速的在不同線程之間進行切換,由于時間間隔很小,來給用戶造成一種多個線程同時運行的假象。這樣的程序運行機制被稱為軟件多線程。如微軟的Windows作業(yè)系統(tǒng)和Linux就是在各個不同的執(zhí)行緒間來回切換,被稱為單人多任務作業(yè)系統(tǒng)。而DOS這類文字接口作業(yè)系統(tǒng)在一個時間只能處理一項工作,被視為單人單工作業(yè)系統(tǒng)。除此之外,許多系統(tǒng)及處理器也支持硬件多線程技術(shù)。對稱多處理機(SMP)系統(tǒng)具有多個處理器,所以具有真正的同時執(zhí)行多個線程的能力;CMP技術(shù)通過在一塊芯片上集成多個核心(Core)也具有真正的多線程能力;CMT技術(shù)則稍有不同,有的是依靠硬件執(zhí)行線程切換來獲得多線程能力,操作系統(tǒng)不再負責線程切換,因而這部分開銷可以減少甚至消除,這方面典型的例子是Sun的UltraSPARC T1,它同時綜合了CMP和CMT。微軟的Windows 2000以后的操作系統(tǒng)皆支持多線程與超線程技術(shù)。

由于程序代碼中存在的數(shù)據(jù)及控制依賴關(guān)系,單線程中所能發(fā)掘的指令并行潛力是有限的。為了發(fā)掘有限的指令級并行潛力而一味強化亂序執(zhí)行和分支預測,以至于處理器復雜度和功耗急劇上升,有時候是得不償失的。因此,現(xiàn)代微處理器多采用硬件多線程技術(shù)來發(fā)掘線程之間的線程級并行潛力。這樣子允許在接口轉(zhuǎn)換的專業(yè)領域之運算能力大幅提升:既使這樣做對于提升單一程序或是線程的性能相當困難,但是多數(shù)的系統(tǒng)都是使用多任務的方式作業(yè)。能夠明顯的提升整體系統(tǒng)運算能力,總體吞吐量獲得提升。

在計算機科學中,庫(ibrary)是用于開發(fā)軟件的子程序集合。庫和可執(zhí)行文件的區(qū)別是,庫不是獨立程序,他們是向其他程序提供服務的代碼。庫鏈接是指把一個或多個庫包括到程序中,有兩種鏈接形式:靜態(tài)鏈接和動態(tài)鏈接,相應的,前者鏈接的庫叫做靜態(tài)庫后者的叫做動態(tài)庫。靜態(tài)鏈接是由鏈接器在鏈接時將庫的內(nèi)容加入到可執(zhí)行程序中的做法。鏈接器是一個獨立程序,將一個或多個庫或目標文件(先前由編譯器或匯編器生成)鏈接到一塊生成可執(zhí)行程序。靜態(tài)鏈接的最大缺點是生成的可執(zhí)行文件太大,需要更多的系統(tǒng)資源,在裝入內(nèi)存時也會消耗更多的時間。動態(tài)鏈接,在可執(zhí)行文件裝載時或運行時,由操作系統(tǒng)的裝載程序加載庫。大多數(shù)操作系統(tǒng)將解析外部引用(比如庫)作為加載過程的一部分。在這些系統(tǒng)上,可執(zhí)行文件包含一個叫做import directory的表,該表的每一項包含一個庫的名字。根據(jù)表中記錄的名字,裝載程序在硬盤上搜索需要的庫,然后將其加載到內(nèi)存中預先不確定的位置,之后根據(jù)加載庫后確定的庫的地址更新可執(zhí)行程序??蓤?zhí)行程序根據(jù)更新后的庫信息調(diào)用庫中的函數(shù)或引用庫中的數(shù)據(jù)。這種類型的動態(tài)加載稱為裝載(load-time)時加載,被包括Windows和Linux的大多數(shù)系統(tǒng)采用。裝載程序在加載應用軟件時要完成的最復雜的工作之一就是加載時鏈接。

處理器指令集MMX是由英特爾開發(fā)的一種SIMD多媒體指令集,共有57條指令。它于1996年集成在英特爾奔騰(Pentium)MMX處理器上,以提高其多媒體數(shù)據(jù)的處理能力。其優(yōu)點是增加了處理器關(guān)于多媒體方面的處理能力,缺點是占用浮點數(shù)寄存器進行運算(64位MMX寄存器實際上就是浮點數(shù)寄存器的別名)以至于MMX指令和浮點數(shù)操作不能同時工作。為了減少在MMX和浮點數(shù)模式切換之間所消耗的時間,程序員們盡可能減少模式切換的次數(shù),也就是說,這兩種操作在應用上是互斥的。AMD在此基礎上發(fā)展出3D Now!指令集。3D Now!發(fā)布一年后,Intel在MMX基礎上發(fā)展出SSE(Streaming SIMD Extensions)指令集,用來取代MMX。新開發(fā)的程序不再僅使用MMX來最優(yōu)化軟件運行性能,而是改使用如SSE、3DNOW!等更容易最優(yōu)化性能的新一代多媒體指令集,不過的處理器大多仍可以運行針對MMX最優(yōu)化的較早期軟件。

SSE(Streaming SIMD Extensions)是英特爾在AMD的3D Now!發(fā)布一年之后,在其計算機芯片Pentium III中引入的指令集,是繼MMX的擴充指令集。SSE指令集提供了70條新指令。AMD后來在Athlon XP中加入了對這個新指令集的支持。SSE2,全名為Streaming SIMD Extensions 2,是一種IA-32架構(gòu)的SIMD(單一指令多重數(shù)據(jù))指令集。SSE2是在 2001年隨著Intel發(fā)表第一代Pentium 4處理器也一并推出的指令集。它延伸較早的SSE指令集,而且可以完全取代MMX指令集。在2004年,Intel 再度擴展了SSE2指令為 SSE3 指令集。與 70 條指令的 SSE 相比,SSE2新增了144條指令。在2003年,AMD也在發(fā)布AMD64的64位處理器時跟進SSE2指令集。

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

SSE3是Intel公司所其原有IA-32架構(gòu)的處理器所研創(chuàng),并在2004年初的新款Pentium 4(P4E,Prescott核心)處理器中使用,之后2005年4月AMD公司也發(fā)表具備部分SSE3功效的處理器:Athlon 64(E3步進核心),此后的x86處理器也幾乎都具備SSE3的新指令集功能

此外,在SSE3提出之前,x86架構(gòu)的處理器先后已有多種多媒體指令集被提創(chuàng)與使用,先后順序大致是Intel MMX、AMD 3DNow![4]、Intel SSE、Intel SSE2等。附帶一提的是,SSE3比在它之前的SSE2增加13條新指令。

高級加密標準指令集(或稱英特爾高級加密標準新指令,簡稱AES-NI)是一個x86指令集架構(gòu)的擴展,用于Intel和AMD微處理器,由Intel在2008年3月提出。該指令集的目的是改進應用程序使用高級加密標準(AES)執(zhí)行加密和解密的速度。

多核處理器(Multi-core processor),又稱多核微處理器,是在單個計算組件中,加入兩個或以上的獨立實體中央處理單元(簡稱核心,英語:Core),只有兩個核心的處理器,稱為雙核處理器(dual-core processor)。這些核心可以分別獨立地運行程序指令,利用并行計算的能力加快程序的運行速度?!岸嗪诵摹蓖ǔJ菍τ谥醒胩幚砥鳎–entral Processing Unit,CPU)而論的,但是某些時候也指數(shù)字信號處理器(DSP)和系統(tǒng)芯片(SoC)。

通常,把將兩個或更多獨立處理器封裝在一個單一集成電路(IC)中的方案稱為多核心處理器;而封裝在不同IC中的獨立處理器形成的計算機系統(tǒng)被稱為多處理器。在某些情況中(比如廣告中),有些人會將在同一個集成電路中多個獨立的單核心微處理器(或多核心微處理器)稱做“多處理模塊”、“多核心”等,其實是指“多處理器”而不是“多核心處理器”。除非特別說明,本文將使用“多核心”指代在同一集成電路中集成多個獨立處理器的CPU(即“多核心處理器”)。

一般情況下,多核心處理器可以在每個核心分別獨立物理封裝的情況下進行多任務處理(線程級并發(fā)處理(Thread-Level Parallelism,TLP),這種形式的TLP通常被認為是芯片級多處理)。

AVX指令集(Advanced Vector Extensions,即高級向量擴展指令集)是x86架構(gòu)處理器中的指令集,被英特爾和AMD的處理器所支持。AVX指令集由英特爾在2008年3月提出,并在2011年第一季度出品的Sandy Bridge系列處理器首獲支持。隨后,AMD在2011年第三季度的Bulldozer系列處理器也支持了AVX。

AVX是X86指令集的SSE延伸架構(gòu),如IA16至IA32般的把暫存器XMM 128bit提升至YMM 256bit,以增加一倍的運算效率。此架構(gòu)支持了三運算指令(3-Operand Instructions),減少在編碼上需要先復制才能運算的動作。在微碼部分使用了LES LDS這兩少用的指令作為延伸指令Prefix。

AVX2指令集將整數(shù)操作擴展到了256位,并引入了FMA指令集作為擴充。AVX-512則將指令進一步擴展到了512位。

本詞條內(nèi)容貢獻者為:

李岳陽 - 副教授 - 江南大學