如何从已编译的CUDA中删除所有PTX以防止知识产权泄漏

时间:2017-01-26 13:08:23

标签: cuda

CUDA PTX类似于汇编,因此揭示了源代码。我已经阅读了CUDA编程指南的第3.1节和Section 3.2.7 from the online CUDA compiler documentation。我对-arch与-code编译器选项有基本的了解。

如果我理解正确,指定-arch compute_XX会生成PTX。而-code sm_XX使 PTX和cubin。

我希望 cubin,以便在结果图像中没有PTX。我怎样才能做到这一点?

最好通过Visual Studio设置,尽管我只在Visual Studio项目设置中找到-gencode选项。

1 个答案:

答案 0 :(得分:6)

PTX与装配不太相似。 PTX是程序的中间表示,可以编译为Nvidia GPU随时间使用的不同的,不兼容的指令集架构(ISA)。通常,用于Nvidia GPU的新ISA附带更新版本的PTX,可以代表ISA的新功能。

  • -arch-code选项nvcc work slightly differently与您描述的内容相同。它们不是(互相排斥的)替代品,而是决定不同的方面 -arch控制哪个PTX版本用作中间表示。因此,它与compute_XX PTX版本组合 -code控制嵌入到生成的二进制文件中的代码 - 如果在-code sm_XX形式中使用,则指定ISA的机器代码,或者如果{{{{{}},则由PTX进行即时编译。指定1}} 作为一种特殊的快捷方式,仅指定 -code compute_XX会将指定的ISA PTX代码的已编译代码嵌入到二进制文件中 - 这可能是您的情况是指你想避免的。
    最后,-arch sm_XX选项允许您指定多个-gencode / -arch对,结果二进制包含每个对的单独代码。
  • 您可以使用nvprune从二进制文件中删除除所需的所有ISA代码之外的所有代码。
  • 如果不确定,您可以随时使用cuobjdump检查特定二进制文件中的内容。

因此,阻止任何PTX代码出现在生成的二进制文件中的方法是将nvcc作为-code调用(或者将多个此类对与nvcc -arch compute_XX -code sm_XX一起使用)。