【发布时间】:2015-10-17 23:27:31
【问题描述】:
我正在使用 Visual Studio 2013 开发 CUDA (7.0) 项目。该项目是 64 位的。 我正在使用驱动程序 API,需要从 ptx 或 cubin 文件加载模块。但我找不到该文件。 在 VS 我去 Properties->CUDA C/C++ ->Common->NVCC Compilation Type ,改变它到 -cubin 或 ptx 。编译器完成正常,但我找不到那个文件。我只能看到 kernel.cu.obj 和 kernel.cu.cache 文件输出调试目录。这里有什么问题?
更新:
如果我转到 Properties->CUDA C/C++ ->Common->Keep Preprocessed Files 并设置为 YES。然后我会看到 .ptx 和其他中间内容。但据我了解,此选项不是强制性的.ptx?还演示 CUDA SDK 项目,如“matrixMulDrv” spitr ptx,关闭该选项。我不知道有什么区别。
这里是matrixMulDrv项目编译命令:
C:\ProgramData\NVIDIA Corporation\CUDA Samples\v7.0\0_Simple\matrixMulDrv>"C:\Program Files\NVIDIA GPU 计算工具包\CUDA\v7.0\bin\nvcc.exe" -gencode=arch=compute_20,code=\"compute_20,compute_20\" --use-local-env --cl-version 2013 -ccbin "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\ x86_amd64" -I./ -I../../common/inc -I./ -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.0/include" -I../../common/inc -I "C:\程序 文件\NVIDIA GPU 计算工具包\CUDA\v7.0\include" -G --keep-dir x64\Debug -maxrregcount=0 --machine 64 -ptx -cudart static -Xcompiler "/wd 4819" -o 数据/matrixMul_kernel64.ptx "C:\ProgramData\NVIDIA 公司\CUDA Samples\v7.0\0_Simple\matrixMulDrv\matrixMul_kernel.cu"
这是我的项目 CUDA 内核编译命令:
E:\Documents\visual studio 2012\Projects\ProjectName\ProjectName>"C:\Program Files\NVIDIA GPU 计算工具包\CUDA\v7.0\bin\nvcc.exe" -gencode=arch=compute_20,code=\"sm_20,compute_20\" --use-local-env --cl-version 2013 -ccbin "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\ x86_amd64" -I"E:\Documents\visual studio 2012\Projects\XXXXXX\XXXXX\XXXXX\include"-I"E:\Documents\visual 工作室 2012\Projects\XXXXX\XXXXX\XXXXX\include" -I"E:\Documents\visual 工作室 2012\项目\XXXXXXXX\XXXXXXX\XXXXXX\包括” -I"E:\Documents\visual studio 2012\Projects\XXXXXXX\XXXXXX\XXXXXXX\include" -I"E:\Documents\visual 工作室 2012\Projects\ProjectName\ProjectName\include" -I"E:\Documents\visual studio 2012\Projects\XXXXXXX\XXXXXX\XXXXXX\include" -I"E:\Documents\visual 工作室 2012\项目\XXXXXX\XXXXXX\XXXXXX\包括” -I"E:\Documents\visual studio 2012\Projects\XXXXXXX\XXXXXX\XXXXXX\include" -I"E:\Documents\visual 工作室 2012\Projects\XXXXXX\XXXXXX\XXXXXX\include"-I"C:\Program 文件\NVIDIA GPU 计算工具包\CUDA\v7.0/include" -I"C:\ProgramData\NVIDIA Corporation\CUDA Samples\v7.0\common\inc" -I"E:\Documents\visual studio 2012\Projects\ProjectName\ProjectName\include" -I"C:\Program 文件\NVIDIA GPU 计算工具包\CUDA\v7.0\include" -I"C:\Program 文件\NVIDIA GPU 计算工具包\CUDA\v7.0\include" -G --keep-dir x64\Debug -maxrregcount=0 --machine 64 --compile -cudart static -g
-DWIN32 -DWIN32 -DWIN64 -D_DEBUG -D_CONSOLE -D_UNICODE -DUNICODE -Xcompiler "/EHsc /W3 /nologo /Od /Zi /RTC1 /MTd " -o x64\Debug\skernel.cu.obj "E:\Documents\visual studio 2012\Projects\ProjectName\ProjectName\src\skernel.cu"
可以看到 matrixMulDrv 项目设置为使用这一行编译 .ptx data/matrixMul_kernel64.ptx 而在我的项目中我有 -o x64\Debug\skernel.cu .obj 。但是我在两个项目上都有相同的 CUDA 编译器设置。
【问题讨论】:
-
您是否尝试过在编译过程中仔细查看 VS 控制台输出?根据我的经验,它总是 标识它正在创建的对象的完整路径。您是否尝试过使用 windows 文件搜索功能来查找编译后创建的新 .ptx 或 .cubin 文件?
-
是的,我都试过了。我只是在文件系统中找不到这些文件。
-
我建议将 VS 编译命令的整个输出粘贴到您的问题中。将 VS 输出详细程度设置为高。如果你不知道怎么做,请谷歌搜索。它位于 VS 菜单选项之一中。还有各种 CUDA 示例代码可以生成 ptx 或 cubin,例如 matrixMulDrv。尝试构建其中一个,看看是否可以找到 ptx 输出(例如,matrixMulDrv 编译会创建一个 matrixMul_kernel64.ptx 文件。)如果您可以找到该文件,然后比较该项目与您的项目之间的差异。
-
matrixMulDrv 确实将 ptx 吐到“数据”文件夹中。但我找不到负责的配置。
-
对于您的文件 skernel.cu,在 VS 控制台右侧的解决方案资源管理器窗口中,选择该文件,然后右键单击并选择属性。在打开的对话框中,选择“CUDA C/C++”并查看右侧。 “编译器输出(Obj/cubin)”旁边和“NVCC 编译类型”旁边显示什么?在最后一个位置,我很确定您的 skernel.cu 文件应该是“生成混合对象文件(--compile)”,而它应该是“生成 .ptx 文件(-ptx)”您需要执行此详细级别比较你的项目和matrixMuldrv的项目差异
标签: visual-studio cuda