CUDA错误:MapSMtoCores未定义SM 3.5未定义

时间:2014-01-26 13:36:24

标签: cuda makefile cuda-gdb

我无法运行包装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,我认为我赢了。我应该使用环境变量吗?

1 个答案:

答案 0 :(得分:2)

有两个不同的问题。第一个问题是成功构建的CUDA应用程序在运行时失败,第二个问题是由于构建环境无效而构建CUDA应用程序失败。

消息,

  

MapSMtoCores undefined SM 3.5未定义(请更新到最新的SDK)!

当使用CUDA样本框架(helper_cuda.h)的应用程序(通常是其中一个CUDA样本)在计算能力3.5的设备上运行并且应用程序是使用具有样本框架的版本构建的时,输出

尚未更新以涵盖该计算能力。

如果安装了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访问权限的人应该修复它。使用有效的构建环境,您应该能够重建应用程序。