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

Tys*_*mer 2 cuda

CUDA PTX类似于汇编,因此揭示了源代码.我已经阅读了在线CUDA编译器文档中的CUDA编程指南的3.1节和3.2.7节.我对-arch与-code编译器选项有基本的了解.

如果我理解正确,指定-arch compute_XX会生成PTX.而代码sm_XX 同时生成 PTX和cubin.

想要Cubin,这样在得到的图像中没有PTX.我怎样才能做到这一点?

最好通过Visual Studio设置,虽然我只在Visual Studio项目设置中找到-gencode选项.

ter*_*era 6

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

  • -arch-code选项nvcc 略微不同的方式工作,以你的描述.它们不是(互斥的)替代品,而是决定不同的方面.
    -arch控制哪个PTX版本用作中间表示.因此,它与compute_XXPTX版本结合使用.
    -code控制嵌入到结果二进制文件中的代码 - 如果在-code sm_XX表单中使用指定的ISA的机器代码,或者如果-code compute_XX指定则由GPU驱动程序进行即时编译.
    作为一种特殊的快捷方式, 指定-arch sm_XX将指定的ISA PTX代码的编译代码嵌入到二进制文件中 - 这可能是您要引用的情况.
    最后,该-gencode选项允许您指定多个-arch/ -code对,结果二进制包含每个对的单独代码.
  • 您可以使用nvprune从二进制文件中删除除所需ISA代码之外的所有代码.
  • 如果不确定,您可以随时使用cuobjdump来检查特定二进制文件中的内容.

因此,防止任何PTX代码出现在生成的二进制文件中的方法是将nvcc调用为nvcc -arch compute_XX -code sm_XX(或将多个这样的对一起使用-gencode).