既找不到 .cubin 也找不到 .ptx 文件编译 CUDA

Posted

技术标签:

【中文标题】既找不到 .cubin 也找不到 .ptx 文件编译 CUDA【英文标题】:Can't find neither .cubin nor .ptx file compiling CUDA 【发布时间】: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.objkernel.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的项目差异 【参考方案1】:

Visual Studio 中的 CUDA 项目可以在项目级别(在这种情况下它们在项目属性...CUDA...设备中定义)和文件级别(在这种情况下您可以右键单击文件以调出其属性并在类似位置找到它们)。

文件可以从全局项目设置继承其设置,也可以替换它们(如果您在文件级别选择)。

其中一些设置将决定当nvcc 编译该文件时将生成什么类型​​的输出(因此实际上需要哪些编译开关)。普通的 CUDA 运行时 API 项目需要将它们的模块编译成(“混合”)对象文件(即 .o),但 CUDA 驱动程序 API 项目通常需要 .cubin 文件或 .ptx 形式的 cuda“对象”文件。

有一些设置可以修改这一代,例如将文件从典型的 CUDA 运行时 API 编译切换到典型的驱动程序 API 编译,您可以将“NVCC 编译类型”选项从“生成混合目标文件(--compile )”到“生成 .ptx 文件 (-ptx)”

如果您在文件级别执行此操作,则需要对需要更改其设置的每个文件执行此操作。

【讨论】:

以上是关于既找不到 .cubin 也找不到 .ptx 文件编译 CUDA的主要内容,如果未能解决你的问题,请参考以下文章

求endnote 高手解答 我用endnote自己编了一个style ,但是怎么找也找不到这个style 存储在哪里

既找不到样式组件的秘密内部结构

如何否定“isblank”功能

NVRTC 编译何时应生成 CUBIN?

无头件是啥意思

brew install clang-omp 不工作