交叉编译到较旧的CUDA工具包版本?

时间:2012-11-27 23:34:10

标签: cuda

我在共享计算机上并且没有root权限。

我的代码因以下CUDA错误而死亡

CUDA driver version is insufficient for CUDA runtime version

我想为旧工具包构建我的程序。我认为这是可能的,因为商业应用程序的分发支持早期的最新工具包(?)。

我玩过arch旗帜,但没有成功。

nvcc -arch=compute_13 fun.cu
nvcc -arch=compute_20 fun.cu

是什么标志要编译成早期的工具包版本? 在我的情况下,我有一个版本4工具包,但我相信驱动程序只执行版本3

2 个答案:

答案 0 :(得分:2)

我不知道命令行标志或类似的选项,告诉CUDA 4.x工具包的行为就好像它是一个CUDA 3.x工具包,例如。

正如您所发现的,对于特定版本的工具包,需要特定的驱动程序版本(或更新版本)。

一种方法是自行安装所需的工具包。您不需要root权限,但在用户目录中需要一些磁盘空间。选择所需的工具箱from the archive并将其安装到用户目录空间中的本地目录中。 (该工具包将提示您输入安装位置,并获取其他工具包安装选项:sh <toolkit filename> --help)。将工具包安装到本地目录后,例如/ home / user / cuda,然后修改你的PATH以包含/ home / user / cuda / bin(在任何其他cuda目录之前,例如/ usr / local / cuda / bin)和你的LD_LIBRARY_PATH包含/ home / user / cuda / lib和/ home / user / cuda / lib64(在任何其他cuda lib目录之前。)如果你想使这些永久化,你可以编辑.bashrc文件或使用类似的方法,具体取决于发行版/ shell。然后,您应该能够正常键入您的nvcc编译命令。如果要链接任何特定的库,例如cublas等,则需要像往常一样使用-L编译器/链接器开关指向本地目录中的cublas库。

驱动程序不受此任何影响,cuda工具包也不会安装在社区位置,例如/ usr / local / cuda。如果还原PATH和LD_LIBRARY_PATH环境变量,则应恢复使用社区位置中安装的cuda工具包的先前功能。

答案 1 :(得分:1)

首先,您需要将旧工具包下载并安装到您的主目录。

完成后,您可以执行以下操作。

在.bashrc

中设置CUDADIR = path / to / cuda /

如果你有,那么如果你使用Makefile,你可以使用$(CUDADIR)/bin/nvcc作为编译器,$(CUDADIR)/lib64作为你的库路径,$(CUDADIR)/include作为你的包含路径。

如果您正在使用shell脚本或在命令行上进行编译,请使用$CUDADIR/bin/nvcc,依此类推。

另一种选择是将$ CUDADIR / bin添加到您的$ PATH中,就像你的.bashrc中的以下内容一样。

CUDADIR=/home/username/cuda
export PATH=$CUDADIR/bin:$PATH
export LD_LIBRARY_PATH=$CUDADIR/lib64:$LD_LIBRARY_PATH

更新系统后,您只需将CUDADIR指向的路径更改为新位置,就不必更改任何其他内容。

-arch标志用于指定体系结构而不是工具包版本。