我目前正在尝试在最新的CUDA工具包(版本11.1)上编译Darknet。我的GPU支持运行CUDA 5,是一款GeForce 940M显卡。然而,在使用最新的CUDA工具包重新构建Darknet时,出现以下错误:
nvcc fatal : 不支持的GPU架构“compute_30”
由于compute_30适用于3.0版本,但我的GPU可以运行版本5,所以为什么会失败呢?是否可能我的代码检测到了我的英特尔集成显卡而不是我的Nvidia GPU?如果是这种情况,是否可以更改其检测方式?
我目前正在尝试在最新的CUDA工具包(版本11.1)上编译Darknet。我的GPU支持运行CUDA 5,是一款GeForce 940M显卡。然而,在使用最新的CUDA工具包重新构建Darknet时,出现以下错误:
nvcc fatal : 不支持的GPU架构“compute_30”
由于compute_30适用于3.0版本,但我的GPU可以运行版本5,所以为什么会失败呢?是否可能我的代码检测到了我的英特尔集成显卡而不是我的Nvidia GPU?如果是这种情况,是否可以更改其检测方式?
CUDA 10.2版本之后,已经取消了对compute_30
的支持。因此,如果您正在使用nvcc,请确保在构建系统中使用此标志来针对正确的架构。
-gencode=arch=compute_50,code=sm_50
你可能需要使用这个{{one}}来避免架构已过时的警告。
-Wno-deprecated-gpu-targets
compute_30
的引用。你可以将其替换为compute_50
。
以darknet为例,compute_20
已经被注释掉了:# -gencode arch=compute_20,code=[sm_20,sm_21] \ This one is deprecated?
。你也可以这样做,将compute_30
注释掉,因为还有其他指定的compute_##
标志将取代它(compute_35
,compute_50
,compute_52
)。 - Matt Popovich
makefiletemp = open('Makefile','r+')
list_of_lines = makefiletemp.readlines()
list_of_lines[15] = list_of_lines[14]
list_of_lines[16] = "ARCH= -gencode arch=compute_35,code=sm_35 \\\n"
makefiletemp = open('Makefile','w')
makefiletemp.writelines(list_of_lines)
makefiletemp.close()
在#Compile Darknet之前
!make
命令。看起来有效!
compute_30
的引用,从而使其可与CUDA 11.x一起使用。 CUDA 11.x不再支持计算能力3.0。这个特定的错误与您拥有的GPU无关(这是一个编译时的问题,编译过程不依赖于特定的GPU)。 - Robert Crovella