当我们在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