並行向量處理機

並行向量處理機

向量處理器,又稱數組處理器,是一種實現了直接操作一維數組(向量)指令集的中央處理器(CPU)。

基本介紹

  • 中文名:並行向量處理機
  • 又稱:數組處理器
  • 領域:計算機
簡介,基本特點,來自現實世界的例子,並行計算,

簡介

這與一次只能處理一個數據的標量處理器正相反。向量處理器可以在特定工作環境中極大地提升性能,尤其是在數值模擬或者相似領域。向量處理器最早出現於20世紀70年代早期,並在70年代到90年代期間成為超級計算機設計的主導方向,尤其是多個克雷(Cray)平台。由於90年代末常規處理器設計性能提升,而價格快速下降,基於向量處理器的超級計算機逐漸讓出了主導地位。
現在,絕大多數商業化的CPU實現都能夠提供某種形式的向量處理的指令,用來處理多個(向量化的)數據集,也就是所謂的SIMD(單一指令、多重數據)。常見的例子有VIS,MMX,SSE,AltiVecAVX。向量處理技術也能在遊戲主機硬體和圖形加速硬體上看到。在2000年,IBM東芝索尼合作開發了Cell處理器,集成了一個標量處理器和八個向量處理器,套用在索尼的PlayStation 3遊戲機和其他一些產品中。
其他CPU設計還可能包括多重指令處理多重(向量化的)數據集的技術——也就是所謂的MIMD(多重指令、多重數據)——並實現了VLIM。此類設計通常用於特定套用場合,而不是面向通用計算機的市場化產品。在富士通的 FR-V VLIW/vector 處理器中,組合使用了兩種技術。

基本特點

平行向量處理機最大的特點是系統中的CPU是專門定製的向量處理器(VP)。系統還提供共享存儲器以及與VP相連的高速交叉開關。

來自現實世界的例子

x86 架構中的向量指令套用:
void mul_asm(float* out, float* in, unsigned int leng){     
 unsigned int count, rest;      //compute if array is big enough for vector operation     
 rest  = (leng*4)%16;      count = (leng*4)-rest;     // vectorized part;
 4 floats per loop iteration      
if (count>0){      __asm __volatile__  (".intel_syntax noprefix\n\t"      "loop:                 \n\t"      "sub ecx,16            \n\t" // decrease address pointer by 4 floats      "movups xmm0,[ebx+ecx] \n\t" // loads 4 floats in first register (xmm0)      "movups xmm1,[eax+ecx] \n\t" // loads 4 floats in second register (xmm1)      "mulps xmm0,xmm1       \n\t" // multiplies both vector registers      "movups [eax+ecx],xmm0 \n\t" // write back the result to memory      "jnz loop              \n\t"      ".att_syntax prefix    \n\t"        : : "a" (out), "b" (in), "c"(count), "d"(rest): "xmm0","xmm1");      }      // scalar part; 1 float per loop iteration      if (rest!=0)      {       __asm __volatile__  (".intel_syntax noprefix\n\t"      "add eax,ecx           \n\t"      "add ebx,ecx           \n\t"      "rest:                 \n\t"      "sub edx,4             \n\t"      "movss xmm0,[ebx+edx]  \n\t" // load 1 float in first register (xmm0)      "movss xmm1,[eax+edx]  \n\t" // load 1 float in second register (xmm1)      "mulss xmm0,xmm1       \n\t" // multiplies both scalar parts of registers      "movss [eax+edx],xmm0  \n\t" // write back the result\n\t"      "jnz rest              \n\t"      ".att_syntax prefix    \n\t"        : : "a" (out), "b" (in), "c"(count), "d"(rest): "xmm0","xmm1");      }      return;}

並行計算

並行計算(英語:parallel computing)一般是指許多指令得以同時進行的計算模式。在同時進行的前提下,可以將計算的過程分解成小部分,之後以並發方式來加以解決。
電腦軟體可以被分成數個運算步驟來運行。為了解決某個特定問題,軟體採用某個算法,以一連串指令運行來完成。傳統上,這些指令都被送至單一的中央處理器,以循序方式運行完成。在這種處理方式下,單一時間中,只有單一指令被運行(processor level: 比較微處理器,CISC, 和RISC,即流水線Pipeline的概念,以及後來在Pipeline基礎上以提高指令處理效率為目的的硬體及軟體發展,比如branch-prediction, 比如forwarding,比如在每個運算單元前的指令堆疊,彙編程式設計師對programm code的順序改寫)。並行運算採用了多個運算單元,同時運行,以解決問題。

相關詞條

熱門詞條

聯絡我們