實(shí)驗(yàn)室的寒假任務(wù) =_=
No.1
A Survey of General-Purpose Computation on Graphics Hardware
on EUROGRAPHICS 2005
1. Why GP-GPU?
1.1 Powerful and Inexpensive
高內(nèi)存帶寬:Nvidia GeForce 6800 Ultra - 35.2GB/sec
強(qiáng)大的計(jì)算能力:ATI X800 XT - 63GFLOPS, Intel Pentium4 SSE unit(3.7GHz) - 14.8GFLOPS
尖端處理科技的應(yīng)用:最新公布(指該survey發(fā)布的時(shí)間)的GPU包含三億個(gè)晶體管,由0.011微米技術(shù)制作
快速發(fā)展:GeForce 6800的throughput為5900的兩倍。通常GPU的計(jì)算能力平均每年增長(zhǎng)速度為1.7x(pixels/second)和2.3x(vertices/second),而根據(jù)摩爾定律,CPU的對(duì)應(yīng)數(shù)值大概為每年1.4x。粗略的說(shuō),GPU性能每六個(gè)月增長(zhǎng)一倍。
1.2 Flexible and Programmable
1.3 Limitations and Difficulties
GPU的強(qiáng)大計(jì)算性能是建立在它高度針對(duì)的架構(gòu)上的,因此很多應(yīng)用都不適合放到GPU上做。比如文字處理,主要包括內(nèi)存通信,而且很難并行化。
如今的GPU也缺少一些基本的計(jì)算功能,比如整數(shù)運(yùn)算。而且很多只支持32位浮點(diǎn)數(shù)(貌似最近的R670指令集可以處理double類(lèi)型了),這樣導(dǎo)致很多科學(xué)計(jì)算都沒(méi)法在GPU上做。
另外即使對(duì)于適合GPU這些特性的問(wèn)題,真正使用GPU做時(shí)也有不少問(wèn)題。GPU的編程模型很不一樣,高效的GPU編程不僅僅是說(shuō)多學(xué)一門(mén)高級(jí)語(yǔ)言。如今要借助GPU的計(jì)算能力,需要編程人員同時(shí)掌握相應(yīng)的科學(xué)計(jì)算知識(shí)和計(jì)算機(jī)圖形學(xué)知識(shí)。盡管如此,GPU對(duì)性能提升的幫助還是很誘人的。
1.4 GPGPU Today
http://gpgpu.org
一些GPGPU的應(yīng)用包括
Dense and sparse matrix multiplication 計(jì)算領(lǐng)域
Multigrid and conjugate-gradient solves for systems partial differential equations 計(jì)算領(lǐng)域
Ray tracing 圖像處理
Photon mapping 圖像處理
Fluid mechanics solvers 物理模擬
Datamining operations 數(shù)據(jù)庫(kù)/數(shù)據(jù)挖掘
2. Overview of Programmable Graphics Hardware
2.1 Overview of the Graphics Pipeline
當(dāng)今的GPU都采用了稱為graphics pipeline的架構(gòu)。pipeline被分成不同的stage,硬件上每個(gè)stage都被放到task-parallel machine organization上實(shí)現(xiàn)。
2.2 Programmable Hardware
顯卡商們把固定功能的pipeline轉(zhuǎn)化成了一個(gè)更靈活的可編程的pipeliine。主要在geometry stage和fragment stage。原來(lái)的固定的操作被用戶定義的vertex program和fragment program代替
通常來(lái)說(shuō),這些可編程階段讀入一組含有限數(shù)量的 有4個(gè)32位浮點(diǎn)的向量 數(shù)組并輸出一組含有限數(shù)量的4*32浮點(diǎn)向量的數(shù)組。每個(gè)可編程階段都可以訪問(wèn)常數(shù)寄存器,也可以讀寫(xiě)對(duì)應(yīng)的寄存器。
2.3 Introduction to the GPU Programming Model
典型的GPGPU程序都使用了fragment processor作為計(jì)算引擎。通常的結(jié)構(gòu)為:
a. 程序員確定該應(yīng)用的并行部分。應(yīng)用程序被分成幾個(gè)獨(dú)立的可并行段,每段都被看成是一個(gè)kernel,被當(dāng)成fragment program實(shí)現(xiàn)。每個(gè)kernel的輸入輸出都是一個(gè)或多個(gè)數(shù)據(jù)數(shù)組,以texture形式保存在GPU內(nèi)存中。用流相關(guān)的術(shù)語(yǔ)表述的話,這些在texture中的數(shù)據(jù)組成了stream,每個(gè)stream上的元素都要被kernel分別處理。
b. 調(diào)用kernel前要先確定計(jì)算范圍,程序員可以傳遞點(diǎn)的數(shù)據(jù)給GPU。注意GPU在處理一維數(shù)組時(shí)性能有所局限。
c. rasterizer為每個(gè)像素生成一個(gè)fragment。
d. 每個(gè)fragment被同一個(gè)活動(dòng)的kernel程序處理。fragment程序可以讀入任意的全局內(nèi)存,但只能寫(xiě)到rasterizer決定的frame buffer中。這塊還沒(méi)怎么搞懂
e. 每個(gè)fragment的輸出是一個(gè)值或者向量值,可以作為作中的程序結(jié)果,也可以保存為一個(gè)texture,用于后面的計(jì)算,復(fù)雜的應(yīng)用通常需要多個(gè)pipeline之間的傳遞(multipass)
No.1
A Survey of General-Purpose Computation on Graphics Hardware
on EUROGRAPHICS 2005
1. Why GP-GPU?
1.1 Powerful and Inexpensive
高內(nèi)存帶寬:Nvidia GeForce 6800 Ultra - 35.2GB/sec
強(qiáng)大的計(jì)算能力:ATI X800 XT - 63GFLOPS, Intel Pentium4 SSE unit(3.7GHz) - 14.8GFLOPS
尖端處理科技的應(yīng)用:最新公布(指該survey發(fā)布的時(shí)間)的GPU包含三億個(gè)晶體管,由0.011微米技術(shù)制作
快速發(fā)展:GeForce 6800的throughput為5900的兩倍。通常GPU的計(jì)算能力平均每年增長(zhǎng)速度為1.7x(pixels/second)和2.3x(vertices/second),而根據(jù)摩爾定律,CPU的對(duì)應(yīng)數(shù)值大概為每年1.4x。粗略的說(shuō),GPU性能每六個(gè)月增長(zhǎng)一倍。
1.2 Flexible and Programmable
1.3 Limitations and Difficulties
GPU的強(qiáng)大計(jì)算性能是建立在它高度針對(duì)的架構(gòu)上的,因此很多應(yīng)用都不適合放到GPU上做。比如文字處理,主要包括內(nèi)存通信,而且很難并行化。
如今的GPU也缺少一些基本的計(jì)算功能,比如整數(shù)運(yùn)算。而且很多只支持32位浮點(diǎn)數(shù)(貌似最近的R670指令集可以處理double類(lèi)型了),這樣導(dǎo)致很多科學(xué)計(jì)算都沒(méi)法在GPU上做。
另外即使對(duì)于適合GPU這些特性的問(wèn)題,真正使用GPU做時(shí)也有不少問(wèn)題。GPU的編程模型很不一樣,高效的GPU編程不僅僅是說(shuō)多學(xué)一門(mén)高級(jí)語(yǔ)言。如今要借助GPU的計(jì)算能力,需要編程人員同時(shí)掌握相應(yīng)的科學(xué)計(jì)算知識(shí)和計(jì)算機(jī)圖形學(xué)知識(shí)。盡管如此,GPU對(duì)性能提升的幫助還是很誘人的。
1.4 GPGPU Today
http://gpgpu.org
一些GPGPU的應(yīng)用包括
Dense and sparse matrix multiplication 計(jì)算領(lǐng)域
Multigrid and conjugate-gradient solves for systems partial differential equations 計(jì)算領(lǐng)域
Ray tracing 圖像處理
Photon mapping 圖像處理
Fluid mechanics solvers 物理模擬
Datamining operations 數(shù)據(jù)庫(kù)/數(shù)據(jù)挖掘
2. Overview of Programmable Graphics Hardware
2.1 Overview of the Graphics Pipeline
當(dāng)今的GPU都采用了稱為graphics pipeline的架構(gòu)。pipeline被分成不同的stage,硬件上每個(gè)stage都被放到task-parallel machine organization上實(shí)現(xiàn)。
2.2 Programmable Hardware
顯卡商們把固定功能的pipeline轉(zhuǎn)化成了一個(gè)更靈活的可編程的pipeliine。主要在geometry stage和fragment stage。原來(lái)的固定的操作被用戶定義的vertex program和fragment program代替
通常來(lái)說(shuō),這些可編程階段讀入一組含有限數(shù)量的 有4個(gè)32位浮點(diǎn)的向量 數(shù)組并輸出一組含有限數(shù)量的4*32浮點(diǎn)向量的數(shù)組。每個(gè)可編程階段都可以訪問(wèn)常數(shù)寄存器,也可以讀寫(xiě)對(duì)應(yīng)的寄存器。
2.3 Introduction to the GPU Programming Model
典型的GPGPU程序都使用了fragment processor作為計(jì)算引擎。通常的結(jié)構(gòu)為:
a. 程序員確定該應(yīng)用的并行部分。應(yīng)用程序被分成幾個(gè)獨(dú)立的可并行段,每段都被看成是一個(gè)kernel,被當(dāng)成fragment program實(shí)現(xiàn)。每個(gè)kernel的輸入輸出都是一個(gè)或多個(gè)數(shù)據(jù)數(shù)組,以texture形式保存在GPU內(nèi)存中。用流相關(guān)的術(shù)語(yǔ)表述的話,這些在texture中的數(shù)據(jù)組成了stream,每個(gè)stream上的元素都要被kernel分別處理。
b. 調(diào)用kernel前要先確定計(jì)算范圍,程序員可以傳遞點(diǎn)的數(shù)據(jù)給GPU。注意GPU在處理一維數(shù)組時(shí)性能有所局限。
c. rasterizer為每個(gè)像素生成一個(gè)fragment。
d. 每個(gè)fragment被同一個(gè)活動(dòng)的kernel程序處理。fragment程序可以讀入任意的全局內(nèi)存,但只能寫(xiě)到rasterizer決定的frame buffer中。這塊還沒(méi)怎么搞懂
e. 每個(gè)fragment的輸出是一個(gè)值或者向量值,可以作為作中的程序結(jié)果,也可以保存為一個(gè)texture,用于后面的計(jì)算,復(fù)雜的應(yīng)用通常需要多個(gè)pipeline之間的傳遞(multipass)