您的位置:首页 > 其它

浅析CUDA编译流程与配置方法(2)

2010-01-04 10:57 281 查看
二、Nvcc启动与配置说明
1、nvcc的启动条件
在我们的工程文件编译选项的命令行下加入"C:/CUDA/bin/nvcc.exe",表示启动nvcc,要成功启动nvcc首先必须保证所需绑定的一般的C/C++编译器如VS下的cl,在编译器搜索路径范围内,一般默认目录下,如:
"C:/CUDA/bin/nvcc.exe" -ccbin "C:/Program Files/Microsoft Visual Studio 8/VC/bin",又或是,"$(CUDA_BIN_PATH)/nvcc.exe" -ccbin "$(VCInstallDir)bin"。
而Windows平台下编译选项--compiler-bindir是当编译器cl不在默认路径时用来重新设定路径,另外Windows平台下,nvcc 需要能定位到脚本vsvars.bat(这个脚本必须先于cl编译器执行,因为它将指定cl编译器正确运行所需的环境参数),也是通过--compiler-bindir 来重新指定。
CUDA提供了一个用于检查是否是启动nvcc编译的宏:__CUDACC__
2、nvcc的profile文件
在nvcc所在的目录里有一个Nvcc.profile,它定义了nvcc在CUDA中的目录结构,它对于nvcc使用者来说不像是作为一个配置文件,而是提供了指定CUDA Toolkit中的bin和lib等目录的参数变量如PATH, LD_LIBRARY_PATH等,打开这个文件可以看到如下的内容:
PATH += $(TOP)/extools/bin;$(TOP)/open64/bin;$(TOP)/bin;$(TOP)/lib;
INCLUDES += "-I$(TOP)/include" "-I$(TOP)/include/cudart" $(_SPACE_)
LIBRARIES =+ $(_SPACE_) "/LIBPATH:$(TOP)/lib" cudart.lib

CUDAFE_FLAGS +=
OPENCC_FLAGS +=
PTXAS_FLAGS +=
来简单介绍下里面的语法:
# 是注释符
name = <text> :赋值
name ?= <text> :条件赋值
name += <text> :首部增加
name =+ <text> :尾部增加
可通过以下任一种风格对所要赋值的环境变量字符串进行赋值:
%name% :DOS style
$(name) :‘make’ style
其中,nvcc定义了一个指定该profile文件所在目录的宏 _HERE_,它会根据nvcc的调用方式返回绝对或相对路径。
同样,nvcc使用宏 _SPACE_来代表空格字符,使用如下:
INCLUDES += -I../common $(_SPACE_)
去掉宏_SPACE_就会造成粘合效应,如 ‘–I../common-Iapps’ 。还可以看到profile文件中使用+=时$(_SPACE_)放在后面,而使用=+时则放在了前面,就是因为这个原因。
3、nvcc启动所需要使用的几个变量
在第一个部分,已经说明了Nvcc在进行编译时的主要工作流程,以下几个变量就是nvcc自身控制各个编译阶段所需要使用的相关变量。
(1)compiler-bindir
用于指定主机编译器所在的目录,可以使用编译选项--compiler-bindir进行修改。
(2)INCLUDES
这个字符串扩展nvcc的命令选项–Xcompiler,它也定义一些附加的include目录,在实际的编译选项语法范围内,如Linux下的gcc 语法或Windows下的cl 语法。
(3)LIBRARIES
这个字符串扩展nvcc的命令选项–Xlinker,它也定义一些附加的库文件和库文件目录,在实际的编译选项语法范围内,如Linux下的gcc 语法或Windows下的cl 语法。
(4)PTXAS_FLAGS
这个字符串扩展nvcc的命令选项–Xptxas,它主要是给CUDA内部工具ptxas传递一些命令。
(5)CUDAFE_FLAGS
这个字符串扩展nvcc的命令选项-Xcudafe,它主要是给CUDA内部工具cudafe传递一些命令。
(6)OPENCC_FLAGS
这个字符串扩展nvcc的命令选项–Xopencc,它主要是给CUDA内部工具nvopencc传递一些命令。
注意:CUDA提供的几个内部工具在C:/CUDA/bin目录下分别是ptxas,fatbin,cudafe,nvopencc(C:/CUDA/open64/bin)。另外在使用CUDA编程环境向导后可在VS2005中的项目-->属性-->CUDA-->backends中设置相关命令,如下图:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: