而由於傳統的電腦圖學都是以多邊形的方式來建構、繪製 3D 場景;這點和呈現 Volume 所需要的技術是不同的!所以 Volume Rendering 沒辦法直接使用傳統的電腦圖學方法來呈現。
在Windows平台下,用cmake来搭建环境环境,在VS2005下运行CUDA程序。其实,在Windows下,在CUDA2.3的SDK里,有一个Cuda.Rules的文件。通过这个文件,在VS2005里可以很方便的设置各个编译参数。不过通过cmake文件可以不用重复设置编译参数。
在執行 CUDA 程式前,都要把資料先從 Host 的記憶體,複製一份到 device 的記憶體中;一般來說,這樣的部分,都是使用 device 的 global memory 來直接進行存取。不過實際上,有的時候還有別的選擇的~在《nVidia CUDA 簡介》中一文就有提到,除了 global memory 外,還可以透過 constant memory 或 texture memory 的形式,來對 device memory 資料的存取。
在前一篇已經大概介紹過 texture 的基本概念了,在這一篇,就來大概看一下,一般使用 linear memory 的 texture 的方法吧。
在 CUDA Texture 文章的第一篇大概講了一下 texture 在 CUDA 裡的基本概念,而第二篇則是講了 linear memory 的 texture,接下來,自然就是 CUDA Array 的 texture 了~
教你如何在WindowsVista 64bit+VS2008配置CUDA环境
由于最近要做Cg运算平台到Cuda平台的算法移植工作,所以最近正考虑做一个GPGPU和Cpu运算效率的比较公正,但是由于手头的笔记本电脑仅仅对Cuda支持不好(上次安装Cuda后显卡烧坏了),所以这里先做一个使用Cg编程的矩阵运算(加法):
离散数据的二维卷积: 其中,Ar、Ac分别是A的行数与列数。应用很多,比如对图像做高斯平滑(去噪),拿高斯核与输入图像做卷积。 convolutionSeparable之所以”Separable”,是因为它在row、col两个维上分别做了卷积操作。
在上一篇的《nVidia CUDA API》中,已經大概介紹了一些寫 CUDA 程式時,必須知道的 API;接下來,就先開始簡單的 CUDA 程式吧! 這邊舉一個簡單的向量相加的程式來當例子。
CUDA 的 API 架構,大概分成「C 語言的 extension」、「runtime library」兩部分。extension 的部分,提供了 C 的一些延伸,來訂一 CUDA 的變數、程式等等;在最簡單的 case 裡,應該只要用到 extension 的部分就夠了~而 runtime library 的部分,則又提供了一些 CUDA device 的控制函式,以及一些針對 GPU 編寫的特殊的函式。
在《nVidia CUDA API(上)》的部分,已經大致說明了 extension 的部分;這邊要來講的則是 runtime library 的部分。
在运用cuda进行md5crack的时候,遇到一个问题,既cuda是并行的,他不向cpu那样会一句一句的执行。因此在执行过程中有用的线程在当前grid中的索引就显得很重要,那为我们生成md5的字典起到了非常重要的作用。但是,也因为他的串行,很多事情不像cpu那样方便了,因为我们必须从gpu的角度去看问题。现在就让我们看一下具体的问题。
在《nVidia CUDA API(下)》中有提到 CUDA SDK 裡有提供一些基本的裝置管理的界面,也就是像是「cudaSetDevice( int )」這一類的函式。基本上,這些 function 的功用、用法在該篇文章中講的應該是夠了~
延續上一篇講 thread block,這一篇能然是繼續講 transpose 這個範例程式;不過這一篇,則是將焦點放在 shared memory 的使用,也就是 transpose 這個最佳化過的 kernel 函式。