【问题标题】:Can I obtain what's used as __nv_nvrtc_builtin_header.h?我可以获得用作 __nv_nvrtc_builtin_header.h 的内容吗?
【发布时间】:2020-12-20 11:25:38
【问题描述】:

我正在分析使用 nvrtc 库编译的内核(带有调试和 lineinfo)。在分析结果中,许多样本被列为在__nv_nvrtc_builtin_header.h 内。但是 - 磁盘上显然没有这样的文件,自然(?)NVIDIA Compute 源视图无法找到它。

我的问题:

  • __nv_nvrtc_builtin_header.h 中的实际内容是什么?
  • 我可以查看这个神秘标题的内容吗? (如果有帮助,假设我用来执行编译的代码可以被修改/添加到。)

【问题讨论】:

    标签: cuda jit nvrtc cuda-driver


    【解决方案1】:

    __nv_nvrtc_builtin_header.h 中究竟是什么?

    您将在标准 CUDA 中获得的所有标准定义都包含在内,以及工具链在编译期间自动包含的内部工具链/主机编译器头文件。全部组合成一个大文件。

    我可以查看这个神秘标题的内容吗?

    标头包含在nvrtc-builtins 库中,您应该能够在您的平台上使用必要的库转储实用程序来查看它。例如:

    $ objdump -s libnvrtc-builtins.so
    
      [snipped for brevity]
    
    Contents of section .rodata:
     0007a0 2f2a0a20 2a20436f 70797269 67687420  /*. * Copyright
     0007b0 31393933 2d323031 36204e56 49444941  1993-2016 NVIDIA
     0007c0 20436f72 706f7261 74696f6e 2e202041   Corporation.  A
     0007d0 6c6c2072 69676874 73207265 73657276  ll rights reserv
     0007e0 65642e0a 202a0a20 2a204e4f 54494345  ed.. *. * NOTICE
     0007f0 20544f20 4c494345 4e534545 3a0a202a   TO LICENSEE:. *
     000800 0a202a20 54686973 20736f75 72636520  . * This source
     000810 636f6465 20616e64 2f6f7220 646f6375  code and/or docu
     000820 6d656e74 6174696f 6e202822 4c696365  mentation ("Lice
     000830 6e736564 2044656c 69766572 61626c65  nsed Deliverable
     000840 73222920 6172650a 202a2073 75626a65  s") are. * subje
     000850 63742074 6f204e56 49444941 20696e74  ct to NVIDIA int
     000860 656c6c65 63747561 6c207072 6f706572  ellectual proper
     000870 74792072 69676874 7320756e 64657220  ty rights under
     000880 552e532e 20616e64 0a202a20 696e7465  U.S. and. * inte
     000890 726e6174 696f6e61 6c20436f 70797269  rnational Copyri
     0008a0 67687420 6c617773 2e0a202a 0a202a20  ght laws.. *. *
     0008b0 54686573 65204c69 63656e73 65642044  These Licensed D
     0008c0 656c6976 65726162 6c657320 636f6e74  eliverables cont
    

    (如果我显示更多内容,可能违反 EULA...)

    【讨论】:

    • 您问“假设我可以根据自己的喜好对编译过程进行检测”。那是做不到的。没有办法让编译器将标头作为 JIT 进程 AFAIK 的一部分转储
    • 编辑了我的问题和您的回答,以澄清我的意思。
    • 1.您可以将答案还原为您喜欢的任何其他内容;编辑总是只是建议。 2. 是的,这是常见的做法,如果记忆有用,实际上是鼓励的,因为现在问答更好地为他人服务。这个想法是 SO 是一个问答的主体,通过编辑和附加答案来完善。 3.我只是从你的句子开头删掉了几个词,这不像你在“说”你以前没有说的东西。
    • 您对问题的更改足以使答案的要点从“否....”变为“是...”。这一切都是因为你对你一开始提出的问题考虑得不够多。这是我的反对意见。
    • 唯一的变化是“假设我可以仪器等”的措辞。 - 我的改变是澄清我的意思。我的意思是我可以更改“我这边”的代码,而不是 CUDA 方面,即我可以完全控制进行 CUDA NVRTC 调用的代码,并且可以将可能对我有帮助的东西放在那里。
    【解决方案2】:

    添加到@talonmies answer:

    如果您删除 objdump 标题行,您可以通过 xxd -r 传递实际的转储行以正确获取 __nv_nvrtc_builtin_header.h 文本:

    $ objdump -s --section=.rodata /usr/local/cuda/lib64/libnvrtc-builtins.so | tail +5 | xxd -r | sed -r '1s/^.*\//\//;' | less
    
    /*
     * Copyright 1993-2016 NVIDIA Corporation.  All rights reserved.
     *
     * NOTICE TO LICENSEE:
     *
     * This source code and/or documentation ("Licensed Deliverables") are
     * subject to NVIDIA intellectual property rights under U.S. and
     * international Copyright laws.
     *
     * These Licensed Deliverables contained herein is PROPRIETARY and
     * CONFIDENTIAL to NVIDIA and is being provided under the terms and
    

    (最后一个 sed 删除了第 6 行开头的一些垃圾 - 与 CUDA 11.6 一样)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-27
      相关资源
      最近更新 更多