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