【IT168 文档】Cuda用于3D图形处理,不需要我们自己分配处理器,这个重大的问题由运行系统处理。Cuda的物理基础是gpu。由于多核的并行性,可以提供很大的带宽。GPU主要关注于数据处理,而不关注于流控和缓存。我们要关注数据的大小,而不用关注处理器数目。基本上只能用于数据分解,而且功能非常的受限,复杂,很多非常简单的东西,用cuda来处理将会变得非常的复杂。你要想得到好的性能必须付出相应的代价。
线程组层次结构
cuda提供了两种组织线程的方式:grid 和block,其数据类型都是dim3,其中grid只有两维,而block有三维,其维度分别由gridDim和blockDim来确定,block的索引由blockIdx struct定义。在block之下的就是thread了,其为三维的struct,其索引由threadIdx struct定义, threadIdx是一个包含三个常量的结构。但是其分量x,y,z不是指id值,而是索引值。对于大小为(dx,dy)的二维块。其id值x+ydy,三维则为:x+ydy+zdxdydz。
cuda允许定义基于kernal的函数,定义方式为__global__,使用的时候采用<<>>来定义线程数,方式是:前面一个定义grid,grid可以是一维,也可以是二维的,后面一个定义block,可以是一二三维,也可以使用两个int数,此时,这两个数被隐含的定义为gridDim.x和blockDim.x值。线程编号以列为主,由于这个原由,在定义kernel时,没有足够的理由不要定义二维的。