我无法运行包装CUDA代码的python脚本。它告诉我更新我的CUDA SDK,但我认为问题是读取的cuda C文件而不是同名的cuda C ++文件。任何人都知道如何解决这个问题?
错误消息是:
MapSMtoCores undefined SM 3.5 is undefined (please update to the latest SDK)!
1.1...src/cudaconv2/filter_acts.cu(1179) : getLastCudaError() CUDA error :
filterActs: kernel execution failed : (9) invalid configuration argument.
我很确定我使用的是cuda-5。要检查,根据this,我需要
$ cd $(SDK)
$ make
$ ./C/bin/linux/release/deviceQuery
我没有root权限,所以我不得不
$ mkdir ~/CUDA_SDK
$ cp -r /usr/local/cuda/gpu_sdk ~/CUDA_SDK
$ cd ~/CUDA_SDK
$ make
然而,这导致:
../../common/inc/helper_cuda.h:246:12: warning: command line option ‘-Wimplicit’ is valid for C/ObjC but not for C++
../../common/inc/helper_cuda.h:246:12: warning: enumeration value ‘FOO’ not handled in switch
../../common/inc/helper_cuda.h:252:14: error: ‘FOO’ was not declared in this scope
我在helper_cuda.h看了find -name
。它有2个版本:
./C/common/inc/helper_cuda.h
,包含错误中提到的所有变量的cuda C文件的标题,
./CUDALibraries/common/inc/helper_cuda.h
,cuda C ++文件的标题,不包含错误中提到的任何变量。
我还看了grep "is undefined (please update to the latest SDK)!" -r ~/CUDA_SDK
哪个文件可能正在输出错误(在顶部提到),它启动了所有这些,而且引人注目的是,helper_cuda.h是仅有的两个文件之一。
如果我可以读取C ++ helper_cuda.h而不是C helper_cuda.h,我认为我赢了。我应该使用环境变量吗?
答案 0 :(得分:2)
有两个不同的问题。第一个问题是成功构建的CUDA应用程序在运行时失败,第二个问题是由于构建环境无效而构建CUDA应用程序失败。
消息,
当使用CUDA样本框架(helper_cuda.h)的应用程序(通常是其中一个CUDA样本)在计算能力3.5的设备上运行并且应用程序是使用具有样本框架的版本构建的时,输出MapSMtoCores undefined SM 3.5未定义(请更新到最新的SDK)!
尚未更新以涵盖该计算能力。
如果安装了CUDA 5,那么应用程序很可能是使用早期版本的SDK构建的。
第二条消息,
.. src / cudaconv2 / filter_acts.cu(1179):getLastCudaError()CUDA错误: filterActs:内核执行失败:(9)配置参数无效。
可能是由于应用程序未检测到第一个错误然后继续尝试启动内核,该内核具有打印第一个错误的函数返回的无效值。
其他错误是构建错误。这些是由将CUDA SDK复制到您的主文件夹并尝试从那里构建而不更新CUDA环境变量引起的。
在其原生位置之外构建CUDA示例可能需要大量工作,并且不需要使“过滤器行为”应用程序正常工作。要在具有计算能力3.5设备的计算机上运行“过滤器操作”,您需要使用CUDA 5.0或更高版本重建它,或者将其修改为不再依赖于CUDA样本框架(这会更好)。
因此,您应首先确定您是否拥有实际工作的CUDA 5构建环境。如果您没有,那么具有root访问权限的人应该修复它。使用有效的构建环境,您应该能够重建应用程序。