0

我无法运行包含 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。要检查,根据这个,我需要

$ 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

我看了一下find -namehelper_cuda.h。它有 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,我认为我赢了。我应该使用环境变量吗?

4

1 回答 1

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访问权限的人应该修复它。使用工作构建环境,您应该能够重新构建应用程序。

于 2014-01-27T05:50:38.217 回答