英特爾集成性能原語

英特爾集成性能原語

英特爾集成性能原語(Intel Integrated Performance Primitives,Intel IPP),也可以稱作集成執行原語, 是一個多執行緒軟體函式庫,包含用於多媒體和數據處理套用的函式,由英特爾公司開發的。該庫支持英特爾和兼容處理器,可用於Linux、MacOS、Windows和Android作業系統。它可單獨提供或作為Intel Parallel Studio的一部分使用。

基本介紹

  • 中文名:英特爾集成性能原語
  • 外文名:Intel Integrated Performance Primitives
  • 學科:軟體工程
  • 定義:多執行緒軟體函式庫
  • 套用:多媒體和數據處理
  • 支持:Linux、MacOS、Windows和Android
簡介,多執行緒與庫,處理器指令集,

簡介

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

多執行緒與庫

多執行緒(multithreading),是指從軟體或者硬體上實現多個執行緒並發執行的技術。傳統作業系統中的單執行緒進程由進程控制塊和用戶地址空間、以及管理進程執行的調用/返回行為的系統堆疊或用戶堆疊構成。如果把進程的管理和執行相分離,進程作為作業系統中進行保護和資源分配的單位,允許一個進程中包含有多個可並發執行的控制流,這些控制流切換時不必執行緒則是指進程中的一條執行路徑(控制流),每個進程內允許包含多個並行執行的路徑,這就是多執行緒。執行緒是系統進行處理器調度的基本單位,同一個進程中的所有執行緒共享進程獲得的主存空間和資源,執行緒具有:①一個執行緒執行狀態;②一個受保護的執行緒上下文;③一個獨立的程式指令計數器;④一個執行堆疊;⑤一個容納局部變數的靜態存儲器通過進程調度,通信時可以直接藉助於共享的記憶體區,這就形成了多執行緒進程。
軟體多執行緒。即便處理器只能運行一個執行緒,作業系統也可以通過快速的在不同執行緒之間進行切換,由於時間間隔很小,來給用戶造成一種多個執行緒同時運行的假象。這樣的程式運行機制被稱為軟體多執行緒。如微軟的Windows作業系統和Linux就是在各個不同的執行緒間來回切換,被稱為單人多任務作業系統。而DOS這類文字接口作業系統在一個時間只能處理一項工作,被視為單人單工作業系統。除此之外,許多系統及處理器也支持硬體多執行緒技術。對稱多處理機(SMP)系統具有多個處理器,所以具有真正的同時執行多個執行緒的能力;CMP技術通過在一塊晶片上集成多個核心(Core)也具有真正的多執行緒能力;CMT技術則稍有不同,有的是依靠硬體執行執行緒切換來獲得多執行緒能力,作業系統不再負責執行緒切換,因而這部分開銷可以減少甚至消除,這方面典型的例子是Sun的UltraSPARC T1,它同時綜合了CMP和CMT。微軟的Windows 2000以後的作業系統皆支持多執行緒與超執行緒技術。
由於程式代碼中存在的數據及控制依賴關係,單執行緒中所能發掘的指令並行潛力是有限的。為了發掘有限的指令級並行潛力而一味強化亂序執行和分支預測,以至於處理器複雜度和功耗急劇上升,有時候是得不償失的。因此,現代微處理器多採用硬體多執行緒技術來發掘執行緒之間的執行緒級並行潛力。這樣子允許在接口轉換的專業領域之運算能力大幅提升:既使這樣做對於提升單一程式或是執行緒的性能相當困難,但是多數的系統都是使用多任務的方式作業。能夠明顯的提升整體系統運算能力,總體吞吐量獲得提升。
在計算機科學中,(ibrary)是用於開發軟體的子程式集合。庫和執行檔的區別是,庫不是獨立程式,他們是向其他程式提供服務的代碼。庫連結是指把一個或多個庫包括到程式中,有兩種連結形式:靜態連結和動態連結,相應的,前者連結的庫叫做靜態庫後者的叫做動態庫。靜態連結是由連結器在連結時將庫的內容加入到可執行程式中的做法。連結器是一個獨立程式,將一個或多個庫或目標檔案(先前由編譯器或彙編器生成)連結到一塊生成可執行程式。靜態連結的最大缺點是生成的執行檔太大,需要更多的系統資源,在裝入記憶體時也會消耗更多的時間。動態連結,在執行檔裝載時或運行時,由作業系統的裝載程式載入庫。大多數作業系統將解析外部引用(比如庫)作為載入過程的一部分。在這些系統上,執行檔包含一個叫做import directory的表,該表的每一項包含一個庫的名字。根據表中記錄的名字,裝載程式在硬碟上搜尋需要的庫,然後將其載入到記憶體中預先不確定的位置,之後根據載入庫後確定的庫的地址更新可執行程式。可執行程式根據更新後的庫信息調用庫中的函式或引用庫中的數據。這種類型的動態載入稱為裝載(load-time)時載入,被包括Windows和Linux的大多數系統採用。裝載程式在載入套用軟體時要完成的最複雜的工作之一就是載入時連結。

處理器指令集

MMX是由英特爾開發的一種SIMD多媒體指令集,共有57條指令。它於1996年集成在英特爾奔騰(Pentium)MMX處理器上,以提高其多媒體數據的處理能力。其優點是增加了處理器關於多媒體方面的處理能力,缺點是占用浮點數暫存器進行運算(64位MMX暫存器實際上就是浮點數暫存器的別名)以至於MMX指令和浮點數操作不能同時工作。為了減少在MMX和浮點數模式切換之間所消耗的時間,程式設計師們儘可能減少模式切換的次數,也就是說,這兩種操作在套用上是互斥的。AMD在此基礎上發展出3D Now!指令集。3D Now!發布一年後,Intel在MMX基礎上發展出SSE(Streaming SIMD Extensions)指令集,用來取代MMX。新開發的程式不再僅使用MMX來最最佳化軟體運行性能,而是改使用如SSE、3DNOW!等更容易最最佳化性能的新一代多媒體指令集,不過的處理器大多仍可以運行針對MMX最最佳化的較早期軟體。
SSE(Streaming SIMD Extensions)是英特爾在AMD的3D Now!發布一年之後,在其計算機晶片Pentium III中引入的指令集,是繼MMX的擴充指令集。SSE指令集提供了70條新指令。AMD後來在Athlon XP中加入了對這個新指令集的支持。SSE2,全名為Streaming SIMD Extensions 2,是一種IA-32架構的SIMD(單一指令多重數據)指令集。SSE2是在 2001年隨著Intel發表第一代Pentium 4處理器也一併推出的指令集。它延伸較早的SSE指令集,而且可以完全取代MMX指令集。在2004年,Intel 再度擴展了SSE2指令為 SSE3 指令集。與 70 條指令的 SSE 相比,SSE2新增了144條指令。在2003年,AMD也在發布AMD64的64位處理器時跟進SSE2指令集。
SSE3(Streaming SIMD Extensions 3),又稱PNI(Prescott New Instructions),它指的是:在原有架構的處理器中,所第三次額外新增、添加的多媒體指令集,之前的兩次分別是SSE、SSE2。
SSE3是Intel公司所其原有IA-32架構的處理器所研創,並在2004年初的新款Pentium 4(P4E,Prescott核心)處理器中使用,之後2005年4月AMD公司也發表具備部分SSE3功效的處理器:Athlon 64(E3步進核心),此後的x86處理器也幾乎都具備SSE3的新指令集功能
此外,在SSE3提出之前,x86架構的處理器先後已有多種多媒體指令集被提創與使用,先後順序大致是Intel MMX、AMD 3DNow![4]、Intel SSE、Intel SSE2等。附帶一提的是,SSE3比在它之前的SSE2增加13條新指令。
高級加密標準指令集(或稱英特爾高級加密標準新指令,簡稱AES-NI)是一個x86指令集架構的擴展,用於Intel和AMD微處理器,由Intel在2008年3月提出。該指令集的目的是改進應用程式使用高級加密標準(AES)執行加密和解密的速度。
多核處理器(Multi-core processor),又稱多核微處理器,是在單個計算組件中,加入兩個或以上的獨立實體中央處理單元(簡稱核心,英語:Core),只有兩個核心的處理器,稱為雙核處理器(dual-core processor)。這些核心可以分別獨立地運行程式指令,利用並行計算的能力加快程式的運行速度。“多核心”通常是對於中央處理器(Central Processing Unit,CPU)而論的,但是某些時候也指數位訊號處理器(DSP)和系統晶片(SoC)。
通常,把將兩個或更多獨立處理器封裝在一個單一積體電路(IC)中的方案稱為多核心處理器;而封裝在不同IC中的獨立處理器形成的計算機系統被稱為多處理器。在某些情況中(比如廣告中),有些人會將在同一個積體電路中多個獨立的單核心微處理器(或多核心微處理器)稱做“多處理模組”、“多核心”等,其實是指“多處理器”而不是“多核心處理器”。除非特別說明,本文將使用“多核心”指代在同一積體電路中集成多個獨立處理器的CPU(即“多核心處理器”)。
一般情況下,多核心處理器可以在每個核心分別獨立物理封裝的情況下進行多任務處理(執行緒級並發處理(Thread-Level Parallelism,TLP),這種形式的TLP通常被認為是晶片級多處理)。
AVX指令集(Advanced Vector Extensions,即高級向量擴展指令集)是x86架構處理器中的指令集,被英特爾和AMD的處理器所支持。AVX指令集由英特爾在2008年3月提出,並在2011年第一季度出品的Sandy Bridge系列處理器首獲支持。隨後,AMD在2011年第三季度的Bulldozer系列處理器也支持了AVX。
AVX是X86指令集的SSE延伸架構,如IA16至IA32般的把暫存器XMM 128bit提升至YMM 256bit,以增加一倍的運算效率。此架構支持了三運算指令(3-Operand Instructions),減少在編碼上需要先複製才能運算的動作。在微碼部分使用了LES LDS這兩少用的指令作為延伸指令Prefix。
AVX2指令集將整數操作擴展到了256位,並引入了FMA指令集作為擴充。AVX-512則將指令進一步擴展到了512位。

相關詞條

熱門詞條

聯絡我們