更新2023.3.4
我笔记本用vs编译后老是提示no kernel image is available for execution on the device,一直以为是驱动版本太高了或者cudatoolkit版本太高了,后来才知道是版本编译的时候有一个算力设置,修改一下就好了,这个数值是算力乘以10,比如我的是算力是5 就可以写成compute_50,sm_50
![](https://i-blog.csdnimg.cn/blog_migrate/30856446e20463f702701619e24936f9.png)
一、根据自己的显卡品牌和型号,在这里可以查找自己显卡的算力
1.在这个网页https://developer.nvidia.com/cuda-gpus查找我们显卡的算力, 比如我的是Geforce 940MX,算力是5.0
如果安装了matlab,输入gpuDevice,也可以查看GPU的算力,以及matlab是不是支持现在的GPU进行加速
二、查找cuda 需要的算力最小支持,然后查找我们显卡能支持的最高版本
三、下载符合自己版本的驱动和cudatoolkit
1.首先在英伟达的驱动下载页面https://www.nvidia.cn/geforce/drivers/
2.复制下面的代码,在页面按F12,然后找到console,粘贴,按下enter;
注意第三行的 200 是显示多少个驱动,也就是说从最新的驱动往前数,显示 200 个驱动版本 ,如 果200个驱动版本里面没有你想要的,可以填250,或者300这样子就可以找到了。
SystemScanner.prototype.DriverSearch = function(psid, pfid, osID, langCode, whql, beta, dltype, numresults ) {numresults=200;this.scannerStatusUpdate(GFE_SERVER_CONNECTING);theScanner.scannedDevice.downloadInfo=new Object();var parameters='psid='+psid;parameters+='&pfid='+pfid;parameters+='&osID='+osID;parameters+='&languageCode='+langCode;parameters+='&beta='+beta;parameters+='&isWHQL='+whql;parameters+="&dltype="+dltype;parameters+="&sort1=0";parameters+="&numberOfResults="+numresults;var requestUrl=this.driverManualLookupUrl+parameters;this.driversLogUIEvent("warn","SUID:"+this.tracker.scanID+" BEGIN DriverSearch requestUrl:"+requestUrl);this.debugTrace(requestUrl);jQuery.ajax({url:requestUrl,async:false,type:'get',success:function(response){try{theScanner.debugTrace("The Driver Lookup Service Returned:\n\n("+response+")");if(response.length>0){theScanner.resetResults();var driverLookupJsonObj='('+response+')';theScanner.resultsList=new Object();theScanner.resultsList=eval(driverLookupJsonObj)}if(theScanner.resultsList.Success==0){theScanner.scannerStatus="No driver available"}else{theScanner.scannerStatus="Results Ready"}}catch(e){this.driversLogUIEvent("error"," FAIL catch DriverSearch");theScanner.resetResults();theScanner.scannerStatus="No driver available"}},error:function(response){theScanner.resetResults();theScanner.scannerStatus="AJAX Call failed"}});this.driversLogUIEvent("warn","SUID:"+this.tracker.scanID+" END DriverSearch requestUrl:"+requestUrl);}
![](https://i-blog.csdnimg.cn/blog_migrate/550b4719d1f57c56a864fcf8cc83baf9.png)
3.输入我们的显卡型号 点击搜索,等一会 一定要等一下
4. 然后找我们需要的版本
四、安装驱动程序
安装完驱动程序后如何检查驱动是否安装正常
在命令行输入 nvidia-smi,如果提示
'nvidia-smi' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
说明nvidia-smi没有在系统的环境变量中,通过everything查找他有没有在系统中,一般在C:\Program Files\NVIDIA Corporation\NVSMI,添加到环境变量(PATH)
或者通过英伟达的驱动控制面板在【系统信息】【组件】中查找检查驱动的cuda版本
![](https://i-blog.csdnimg.cn/blog_migrate/bf97309656a1bd86095e098cf78e2865.png)
![](https://i-blog.csdnimg.cn/blog_migrate/ff35c9d5b65f04409c4a32a01a503c2b.png)
我第一次就是安装的最新的驱动程序是支持的是cuda12,然后显卡不支持,又进行的重新安装
当时我用nvcc --version,查看我的cuda套件的驱动版本是V11.0.194,用nvidia-smi查看的cuda版本是12,但是我的显卡不支持cuda12,
![](https://i-blog.csdnimg.cn/blog_migrate/42d91b21e416207c55e8d0d44d7f2ca9.png)
五、安装cuda toolkit
1.安装cudatoolkit软件
下载支持我们显卡驱动的cudatoolkit,然后点击安装,选择自定义,选择只安装cuda
2.添加环境变量
安装结束后,右键 我的电脑-->属性-->高级系统设置-->环境变量,系统变量中已经加入了cuda的两个路径。
![](https://i-blog.csdnimg.cn/blog_migrate/fa1a404c902b755b1c4ea7b56fb79ea0.png)
在系统变量中加入下面的路径,点击确定。
CUDA_BIN_PATH: %CUDA_PATH%\bin
CUDA_LIB_PATH: %CUDA_PATH%\lib\x64
CUDA_SDK_PATH: C:\ProgramData\NVIDIA Corporation\CUDA Samples\v11.0
CUDA_SDK_BIN_PATH: %CUDA_SDK_PATH%\bin\win64
CUDA_SDK_LIB_PATH: %CUDA_SDK_PATH%\common\lib\x64
在系统变量path中加入下面的的变量:
%CUDA_BIN_PATH%
%CUDA_LIB_PATH%
%CUDA_SDK_BIN_PATH%
%CUDA_SDK_LIB_PATH%
3.检查是否安装成功
打开cmd,切换目录到
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.0\extras\demo_suite
分别运行这两个程序deviceQuery.exe、bandwidthTest.exe ,result=pass则安装成功,否则就重新安装:
其中我测试deviceQuery.exe运行效果如下
![](https://i-blog.csdnimg.cn/blog_migrate/b3781b32b73ecd99a5b774568d06ed14.png)
这几天查找的时候见过ECC,所以看到这个 搜了一下什么意思,为什么我的是disable
ECC
那么ECC的真正含义是什么?
ECC是纠错码.它不是GPU独有的.在GPU上,它是一种使用额外存储器位来存储错误信息的功能,因此如果在存储器子系统中发生错误(特别严重性),则可以检测并报告,或检测和纠正错误.
普通用户是否可以将ECC设置为禁用?
禁用ECC需要root权限.
关闭ECC会有什么影响?
可用/将增加GPU应用程序可用的带宽和内存大小.如果关闭ECC并发生内存子系统错误,则不会收到任何明确的通知.根据错误发生的上下文,错误可能会产生任何影响范围,从完全没有影响到完整的应用程序崩溃.
我们什么时候打开它?何时关闭?
想要防止内存损坏错误时将其打开.如果您想获得最高性能(例如用于基准测试),或者您认为您的应用程序可以容忍内存错误(例如,您检查结果的有效性,并且您不介意重新运行由于某种原因失败的应用程序),请将其关闭.
我的GeForce 940MX好像不支持ECC