例如,如果你想要找出2,987與1,751的最大公約數(shù),那么可以先用2,987來減1,751。重復地減掉差數(shù)(視需要顛倒順序,以防出現(xiàn)負數(shù)),直到結果為零。在這一例子中,這兩個數(shù)的最大公約數(shù)是103。這是一個完美而高效的方法,但是它是一個天生的串行式方法,因為每一次減法都依賴于上一次的結果。

串行思想雖然占據(jù)主導地位,但是也有例外。最好的例子便是圖形。在圖形中,一個非常簡單、常見以及典型的需求就是旋轉圖像。如果你還記得一些三角學的話,你可能會想起一個簡單的公式,將某個點逆時針旋轉一個角度& Theta:

旋轉

其重點在于,每個點的處理都可以獨立于所有其它點之外。如果你的處理器數(shù)目與點數(shù)一樣多的話,那么整個轉換過程即可在一個大規(guī)模并行運算中完成計算。諸多更加復雜的圖形任務也是如此。

圖形任務的并行友好性特點導致了早期人們在圖形處理器(GPU)中融入多處理器架構。NVIDIA®(英偉達™)頂級Tesla GPU目前包含240個處理器核心。雖然這些核心并不像CPU處理器那樣靈活,但是它們在特定任務上卻更勝一籌,例如諸多計算密集型難題當中重要的向量運算。

無論是針對CPU還是GPU來說,能夠有效利用大量核心的軟件仍然是個難題,但是情況已經變得越來越好。NVIDIA®(英偉達™)憑借著 CUDA™并行編程模型以及C語言擴展充當開路先鋒,該模型讓通用計算能夠在NVIDIA®(英偉達™)GPU上運行,而其C語言擴展則消除了對這種處理器進行編程的門檻。因此,開發(fā)人員能夠分別通過CUDA™工具包以及PGI的CUDA™ Fortran編譯器來利用C、C++以及Fortran語言對NVIDIA®(英偉達™)CUDA™ GPU進行編程。同時還能夠利用諸多驅動程序級的API,例如OpenCL以及DirectCompute。

軟件開發(fā)人員所面臨的最大難題之一便是在現(xiàn)有應用程序上實現(xiàn)更高性能以及開發(fā)出更多全新的計算密集型應用程序。無論是選擇多核CPU還是核群 GPU,除了考慮將其應用程序實現(xiàn)并行化以外,他們別無選擇。根據(jù)近幾年的發(fā)展,CUDA™并行編程模型已經成為一款公認的「更簡單的」并行編程方式(它仍然不簡單,但是CUDA™的確使特定操作變得更加簡單)。而且,與CPU相比,GPU還能夠提供巨大的性能優(yōu)勢。因此這兩大元素的有機結合為開發(fā)人員提供了一條開發(fā)更多創(chuàng)新應用程序的途徑。

分享到

zhaohang

相關推薦