2011-11-25 86 views
1

据我所知,CUDA的PTX文件是由设备运行时编译的JIT的虚拟字节码。这意味着该文件是跨平台的,您可以生成PTX文件,并且可以在任何CUDA兼容设备上运行。但是,当我在文本编辑器中读取文件时,我看到这些指令“.file”,它们具有关于我编译它的原始计算机上的文件的信息。所以我不确定这些指令的目的是什么。另外,考虑到我生成的PTX文件不应该依赖这些文件,可以安全地删除它们吗? (就像如果我想开始写我自己的PTX发电机)。在CUDA的PTX文件中,“.file”指令的用途是什么?

+3

根据PTX规范,这些是调试指令。他们确实可以安全地移除AFAIK。我不是100%肯定,也不是100%确切的用途(虽然我能想象),所以只是一个评论。会对答案感兴趣。 – Bart

回答

5

如果你检查你的函数体,你很可能会发现形式

指令

.loc fileNum fileLine

这表明,这是从线fileLine从文件fileNum生成下面的代码。 fileNum是一个索引整数,用于命名由您要求的.file指令预先声明的文件。

这可以帮助您将您的源代码与生成的PTX输出关联起来。

在JIT编译期间,PTX被转换为本机GPU机器代码。在那里,那些.loc.file根本不出现。它对最终的机器代码绝对没有影响。

+0

谢谢,那就是我一直在寻找的。作为补充,我注意到有一个.loc的第三个参数,它似乎总是为零。这有什么特别的意义吗? – bmillare