Posts Tagged ‘ GPU

GPU學習小筆記0

關於坐標點和像素:

點的描述都是浮點值,但是熒幕上面的像素點都是整型的,如果一個點的坐標為(10.48,20.51),則實際上在熒幕上面的像素點位置為(10,21).

關於Z-buffer:

Z-buffer存儲的Z值並不是線性的,在正投影中Z值是線性的,但是在透視投影中卻是非線性的。且隨著視點到空間點的距離增加而非線性的關係越發明顯。為了減輕這情況,應該盡量設置進裁剪面和遠裁剪面的比率小於等於1000.

Shader Language與高級語言:

Shader Language被稱作高級語言,但是高級語言的一個特性是與硬體獨立,而Shader Language則是需要完全依賴於GPU硬體的,所以只能說:從在便攜性上,Shader Language是高級語言.

Programmable Vertex Processor和Programmable Fragment Processor合二為一:

在DirectX 9之前,Vertex Processor和Fragment(Pixel) Processor在GPU內部是獨立不同的硬體單元,分別運行頂點代碼片段和像素代碼片段。而在DirectX 10之後,GPU發生了巨變,Vertex Processor和Fragment Processor合二為一,不再是分離單獨的運算單元,變成了一個稱之為Stream Processor(Shader Core)流處理單元的東西。注意這裡我稱呼的是流處理單元而不是流處理器。因為一個Stream Processor在嚴格意義上來說並不能算作一個處理器,因為沒有取指和調度單元構成一個完整的前端.

上面的意思是說,一個Shader Core既可以做以前Vertex Processor功能,又可以做Fragment Processor的功能.

關於Streaming Multiprocessors:

而在多個Stream Processor(Shader Core)組成的一個Streaming Multiprocessors多流處理器,或許才能稱為一個完整的處理器,因為每一個Streaming Multiprocessors有獨立的取指和調度單元來構成前端。

Read more

XNA:粒子系統–雨效果1-GPU實現思考

現在繼續完善中,想用GPU運算的方式實現出來,用GPU運算粒子當前的坐標,又分為狀態無關和狀態有關兩種粒子,由於是DirectX 9.0的Shader,Vertex Shaders是無法返回值的,所以假如我們想使用迭代計算粒子當前的坐標值,僅僅依靠Vertex Shaders是無法做出來的,當然,DirectX 10中可以實現。在DirectX 9中,也可以借助Pixel Shaders進行Ping Pong紋理來保存當前的數據。這是狀態有關的GPU粒子系統.

下面來說說狀態無關的粒子系統,狀態有關的粒子系統則比較簡單,推導出相對應粒子位置公式,再傳入時間t即可計算出相對應的坐標。但是這樣的一個缺點就是,我們無法實時的去控制粒子了.

下面說說狀態無關的粒子系統,時間t,重力加速度g,初始速度v0,初始位置pos0,這樣根據中學的公式很容易就可以得出當前的位置公式:

pos1=pos0+vo*t+g*t*t/2.

這樣隨機每個vo值,就能實現各個粒子不同的運動速度,但是這樣粒子的噪聲卻是無法實現的,這個公式太簡單以至於只能在y軸運動.

Read more

Tesla架构下的CUDA程序优化.

本文是电子科技大学的大樟树写滴.

原文:http://blog.csdn.net/darkstorm2111203/archive/2009/07/30/4395612.aspx

CUDA优化的最终 目的是:在最短的时间内,在允许的误差范围内完成给定的计算任务。在这里,“最短的时间”是指整个程序运行的时间,更侧重于计算的吞吐量,而不是单个数据 的延迟。在开始考虑使用GPU和CPU协同计算之前,应该先粗略的评估使用CUDA是否能达到预想的效果,包括以下几个方面:

精度:目前GPU的单精度性能要远远超过双精度性能,整数乘法、求模、求余等运算的指令吞吐量也较为有限。在科学计 算中,由于需要处理的数据量巨大,往往采用双精度或者四精度才能获得可靠的结果,目前的Tesla架构还不能很好的满足高精度计算的需要。如果你的计算需要很高的精度,或者需要进行很多轮的迭代,最 好考虑在关键的步骤中使用双精度,而在其他部分仍然使用单精度浮点以获得指令吞吐量和精度的平衡。而如果你对精度有更高的要求,那么现在的架构还不能太高 的加速比。不过,在2010年将会普及的下一代架构中,双精 度浮点和整数处理能力将有很大的提升,这种情况会有根本性的改变。

Read more

一些关于CUDA的简单的思考.

粗浅的文章,还请大家多多指正.

声明:本文受Creative Commons 署名-非商业性使用-禁止演绎 2.5 中国大陆 License协议保护.

程式的优化问题.

在做CUDA开发的时候,感觉难点之一就是如何将GPU的性能发挥到最大。

比如说,在同学的GeForce 8400M GS上面跑的程式,Block数量可能要设置的比较少,也就是说一个thread粒度会比较大,这样才能发挥8400最大的性能,因为8400的SM数量 实在太少,但是相同的程式设置用到GeForce GTX285上面却不好用了,为什么呢?因为GT300有30个SM,Block数目设置的较多一点才会更适合,thread的粒度相对较小。
尽管基本不会影响到程式的正确性,但是程式的优化却是和GPU不同不一样的,因此,Fermi做出了将32SP才集合成一个SM,而不是像以前的8个SP 组成一个SM,可能也是为了缓解该问题。

对比一下其他并行计算模型.

不过我对其他并行模型并没有多少了解,还请诸位高手指正。

在CUDA并行计算模型上面,一个程式每个thread的粒度都比较小,而且thread的总数一般都是10万个以上,同时众多thread组合成多个 block分批执行,因此在一个block内thread的计算量和任务基本都是高度一致的(否则会引起很显著的性能问题),因此也不适合做分支预测很多 的任务。

Read more

NVIDIA Fermi GPU架构简单解析.

备注:这篇文章是我很早就写的了,大概在2009年10月末的时候就已经写好了,时间过了那么久,网路上面已经有N个版本的Fermi架构解析,大部分华语写的内容都是大同小异,诸位看看就好了,真正的精品请参考本文的参考文献;-)

声明:本文受Creative Commons 署名-非商业性使用-禁止演绎 2.5 中国大陆 License协议保护.

在过去的几年中,GPU的发展产生了较大的变化,GPU强大的性能被局限于处理图形渲染的任务,无疑是对计算资源的浪费,随着GPU可编程能力不断提高,通用计算(GPGPU: General-purpose computing on graphics processing units)应运 而生,目前已经取得部分显著成效,部分应用带来的性能提升也是非常可观.

在DirectX 10规范之前的GPGPU计算中,可编程的单元主要是顶点着色器和 像素着色器,两者在物理上是分离的,数量也是固定的,一个程序要想发挥其最大性能有较大的编程难度。

最早的GPGPU的 开发直接使用了图形学的API,将任务映射成纹理的渲染过程,使用汇编或 者高级着色器语言Cg,HLSL等等)编写程序,然后通过图形学API执行(Direct3D和OpenGL),这样的开发不仅难度较大,程序优化也有很大 难度,对开发人员的入门要求也是较高,因此,传统的GPGPU没有被广泛 应用.

2007年6月,NVIDIA公 司推出了CUDA,CUDA不需要借助图形学API,而是采用了类C语言进行开发。同时,CUDA的GPU采用了统 一处理架构,以及引入了片内共享存储器,这大大降低了基于GPU的并行计 算程式的开发难度。当然,开发人员仍然需要掌握并行算法和GPU架构相关 的知识.

G80和GT200 GPU架构回顾:

最早推出的G80架 构中,采用了128个SP(流处理单元Streaming Processor),每8个SP组成一个SM(多 流处理器Streaming Multiprocessors),每3个SM再组成一个TPC(Thread Processing Cluster, 线程处理器群).

注:在G80架构中,是两个SM组 成一个TPC,而GT200中,是三个SM组成 一个TPC.

Read more

实现无数草体的实时渲染.

Creative Commons 署名-非商业性使用-禁止演绎 2.5 中国大陆 License

作者:杨漱玉青

我们想在地面上面铺满草,形成一个规模可观的草丛,这样子看起来或许更具有美感。
这个想法是最初在上一个基于OpenGL的一个非常简单的赛车项目上面想实现的,当时试过很多种方法。
最先想到的是:独立的一株草的模型,然后多次坐标密集的显示,这样子实现最简单,但是性能却极其低下,FPS已经无法接受了,So,不可行.
然后想到的就是今天要介绍的一种方法,里面图片多重位置渲染之后达到的效果,当时尽管已经想到了但是由于算法不太成熟做出来的效果不是太好所以最后还是没 有采用,不过这次改进之后希望能够变得不错.
不过上次那个项目最后用了一个大的草坪模型显示之后完善,简单方便,但是性能损失比较大.
下面回归正题,介绍今天的草坪显示方法.
综述:利用草坪纹理多位置显示之后达到草地的效果.
首先我们来看纹理,看到了吧?

(纹理来自美国 EA Need For Speed:SHIFT)
一条长长的草地纹理,你可以在里面看到一小株一小珠的草.

Read more

return top