GPUno kernel image is available for execution on the device
Posted 从善若水
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GPUno kernel image is available for execution on the device相关的知识,希望对你有一定的参考价值。
前段时间在一个很古老的笔记本(lenovo Y400 GT650M*2)上安装NVIDIA内核驱动和CUDA,安装过程也是一波三折,首先是NVIDIA内核一直无法加载,提示原因是内核签名失败,最后发现是因为UEFI开启了secure boot
选项,后来关闭这个feature之后内核正常加载了,nvidia-smi
也可以正常使用了,
no kernel image is available for execution on the device
之后写了一段测试程序,发现根本没有使用GPU加速,报告的错误信息如下,
后来在官网上询问才知道是安装的CUDA版本(v11.4)太高,而GTX650的算力等级太低,无法满足CUDA的最低算力等级要求。
产看显卡的计算能力
可以看到GT650M的计算能力是3.0。我们查询到支持计算能力3.0的CUDA版本。
查找支持算力3.0的CUDA版本
这里要注意,CUDAv10.2只能支持Ubuntu1804,所以我回退了Ubuntu版本。如果有小伙伴知道怎么可以不回退,评论里告诉我
你也可以选择下面的方式查询《Matching CUDA arch and CUDA gencode for various NVIDIA architectures》
我们首先查看了最新的CUDAv11.8对于GPU算力的要求,CUDAv11.8的最低算力要求是5.2,如下图:
这个显然我们不能使用,之后我直接看了CUDAv10.2版本的算力要求,可以看到符合我们的要求,
所以我们首先卸载掉已经安装的CUDAv11.7(不同版本卸载命令可能有差异,可以参考CUDA手册),
sudo apt-get --purge remove "*cuda*" "*cublas*" "*cufft*" "*cufile*" "*curand*" \\
"*cusolver*" "*cusparse*" "*gds-tools*" "*npp*" "*nvjpeg*" "nsight*"
因为我回退了Ubuntu版本,所以没有卸载的过程,直接安装CUDAv10.2,安装之后问题就解决了。
方法二
如果看了CUDA手册,你会发现nvcc
有个--arch
的参数,这个参数的默认值根据CUDA版本的不同有所差异,如果你发现CUDA默认的--arch
值和你的GPU架构不匹配,也会出现上面的问题,你可以在编译的时候添加--arch=sm_xy
(x和y取决于你的nvidia architecture)来解决。
附录
测试代码如下:
#include <stdio.h>
#include <stdint.h>
void CPUFunction()
printf("This function is defined to run on the CPU.\\n");
__global__ void GPUFunction()
printf("This function is defined to run on the GPU.\\n");
int main()
int num_gpus;
cudaGetDeviceCount(&num_gpus);
printf("GPU num is %d\\n",num_gpus);
cudaSetDevice(2);
cudaError_t addVectorsErr;
cudaError_t asyncErr;
CPUFunction();
addVectorsErr = cudaGetLastError();
if(addVectorsErr != cudaSuccess) printf("Error: %s\\n", cudaGetErrorString(addVectorsErr));
GPUFunction<<<1, 1>>>();
addVectorsErr = cudaGetLastError();
if(addVectorsErr != cudaSuccess) printf("1Error: %s\\n", cudaGetErrorString(addVectorsErr));
cudaDeviceSynchronize();
addVectorsErr = cudaGetLastError();
if(addVectorsErr != cudaSuccess) printf("2Error: %s\\n", cudaGetErrorString(addVectorsErr));
return 0;
以上是关于GPUno kernel image is available for execution on the device的主要内容,如果未能解决你的问题,请参考以下文章
GPUno kernel image is available for execution on the device
RuntimeError:CUDA error:no kernel image is available for execution on the device报错解决(亲测)
cuda The driver installation is unable to locate the kernel source 深恶痛觉的CSDN用户以及深恶痛觉的lyf5231
linux driver error ------ ERROR: Kernel configuration is invalid