一、GPU典型工作流程:

Intro to Parallel Programming CUDA-第一单元

1.CPU在GPU上分配存储

2.CPU把某个输入数据从CPU复制到GPU上

3.CPU调用某些内核来监视这些在GPU上处理这个数据的内核

4.CPU把结果从GPU复制回CPU

二、Kernel<<<grid of blocks,block of threads>>>(……)

Intro to Parallel Programming CUDA-第一单元

核函数是GPU每个thread上运行的程序。必须通过__gloabl__函数类型限定符定义。形式如下:

                __global__ void kernel(param list){  }

核函数只能在主机端调用,调用时必须申明执行参数。调用形式如下:

                Kernel<<<Dg,Db, Ns, S>>>(param list);

<<<>>>运算符内是核函数的执行参数,告诉编译器运行时如何启动核函数,用于说明内核函数中的线程数量,以及线程是如何组织的。

<<<>>>运算符对kernel函数完整的执行配置参数形式是<<<Dg, Db, Ns, S>>>

  • 参数Dg用于定义整个grid的维度和尺寸,即一个grid有多少个block。为dim3类型。Dim3 Dg(Dg.x, Dg.y, 1)表示grid中每行有Dg.x个block,每列有Dg.y个block,第三维恒为1(目前一个核函数只有一个grid)。整个grid中共有Dg.x*Dg.y个block,其中Dg.x和Dg.y最大值为65535。
  • 参数Db用于定义一个block的维度和尺寸,即一个block有多少个thread。为dim3类型。Dim3 Db(Db.x, Db.y, Db.z)表示整个block中每行有Db.x个thread,每列有Db.y个thread,高度为Db.z。Db.x和Db.y最大值为512,Db.z最大值为62。 一个block中共有Db.x*Db.y*Db.z个thread。计算能力为1.0,1.1的硬件该乘积的最大值为768,计算能力为1.2,1.3的硬件支持的最大值为1024。
  • 参数Ns是一个可选参数,用于设置每个block除了静态分配的shared Memory以外,最多能动态分配的shared memory大小,单位为byte。不需要动态分配时该值为0或省略不写。
  • 参数S是一个cudaStream_t类型的可选参数,初始值为零,表示该核函数处在哪个流之中。

三、如何将彩色图像转换成灰度图像

人对绿色比对红色敏感,对红色比对蓝色敏感

I=0.299f*R+0.589f*G+0.114f*B

四、映射

是一种数据与方法的关系(其实感觉就是函数)。 
Map(Elements, Function) 
元素为待处理的数据集合,Function为对每个元素处理的方法。

 

相关文章:

  • 2021-09-28
  • 2022-12-23
  • 2021-11-19
  • 2021-12-10
  • 2021-11-28
  • 2022-12-23
  • 2021-08-14
  • 2021-06-15
猜你喜欢
  • 2021-04-13
  • 2022-12-23
  • 2022-12-23
  • 2021-08-13
  • 2021-11-12
  • 2021-06-02
  • 2021-04-10
相关资源
相似解决方案