开门见山。

执行.cu文件时,发现根本没有执行核函数,在核函数后面加入下面代码:

    cudaError_t cudaStatus = cudaGetLastError();
	if (cudaStatus != cudaSuccess)
	{
		fprintf(stderr, "addKernel launch failed: %s\n", cudaGetErrorString(cudaStatus));
	}

执行程序后,打印出错误提示:

addKernel launch failed: invalid configuration argument

看字面意思,我理解的是,网格和块的划分有错误,定义的块和网格的维度为:

int dimx_field = 8;
int dimy_field = 160;
dim3 block_field(dimx_field, dimy_field);
dim3 grid_field((NX + block_field.x - 1) / block_field.x, (NY + block_field.y - 1) / block_field.y);

又查了查自己GPU的性能参数,发现其中有一条:

Maximum number of threads per block:1024

但是根据自己的定义,块中的线程为1280,这就是问题所在了。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐