CUDA学习(七) 谈谈id和线程调用

当我们在host端调用kernel函数,就意味着开始了thread调用但是如何只调用一次kernel就有多个thread被启用,我们抛开硬件,先看看抽象出来的软件模型看一段代码//kernel.cu#define N 16__global__ void MatAdd(float A[N][N],float B[N][N],float C[N][N]){ int i=th...
摘要由CSDN通过智能技术生成

当我们在host端调用kernel函数,就意味着开始了thread调用

但是如何只调用一次kernel就有多个thread被启用,我们抛开硬件,先看看抽象出来的软件模型

看一段代码

//kernel.cu
#define N 16
__global__ void MatAdd(float A[N][N],float B[N][N],float C[N][N])
{
    int i=threadIdx.x;
    int j=threadIdy.y;
    C[i][j]=A[i][j];
}

int main()
{
    dim3 dimBlock(N,N);//
    MatAdd<<<1,N>>>(A,B,C);//kernel 调用
}

这里的__global__是CUDA C语言对于C语言的扩展关键字,由该关键字声明的函数,是由host端调用,在device端执行

再谈谈Main函数里卖弄对于kernel函数的调用,我们看看调用的格式

Func<<<Dg,Db,Ns,s>>>(parameter)

这里的Dg代表的是Grid的维度和大小,而Db代表Block的维度和大小,而Ns则是为此调用动态分配的共享存储器的大小,s表示指定相关流。

相关的内容,可以看看我前面的博文

我们观察一下kernel函数

__global__ void MatAdd(float A[N][N],float B[N][N],float C[N][N])
{
    int i=threadIdx.x;
    int
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值