gpt4 book ai didi

c++ - 每次编译cuda源码时md5sum的值都会变化

转载 作者:行者123 更新时间:2023-11-27 22:58:15 26 4
gpt4 key购买 nike

我试图通过 ubuntu 中的 md5sum 命令验证我的宏在编译期间是否真的有效。

例如,通过“nvcc -DTEST_MACRO ....”我得到了一个可执行文件 A。然后通过“nvcc ...”我得到了一个可执行文件 B。当然 md5 值是不同的。但是,我重新编译生成了A。它的md5和之前的不一样。

我拿了一段纯c++的代码,用g++检查了一下,不管编译多少次,md5值都是一样的。所以我认为 nvcc 生成的可执行文件中有类似时间戳的东西。

  • 出于好奇,如何验证我的想法是否正确?
  • 无论如何,我如何验证“TEST_MACRO”在这种情况下是否真的有效?

最佳答案

我认为这种可变性不一定是由于嵌入的时间戳,而是 nvcc 构建可执行文件的方式。

nvcc 是一个编译器驱动程序,这意味着它会“在幕后”启动一系列命令来编译代码。在此序列的执行过程中,将使用随机生成的文件名创建各种临时文件。您可以通过查看添加了 -v 开关的 nvcc 编译命令的输出来了解这一点。

其中一些文件名确实嵌入到可执行文件中,并且由于这些随机生成的文件名在每次调用nvcc编译命令时会有所不同,因此生成的二进制文件会有所不同。

如果您想自己验证这一点,请运行添加了 -vnvcc 命令。然后检查最后的输出是否有 tmpxft... 文件名。然后 grep 为该文件名生成的可执行文件,例如:

grep tmpxft_0000a76e myexe

(将 tmpxft_0000a76e 替换为您的 nvcc 详细输出中出现的任何内容,并将 myexe 替换为您的可执行文件的实际名称。)

如果您想验证 TEST_MACRO 是否真的有效,有几个选项。侵入性最小的可能是将以下行放入您的 TEST_MACRO 正文中:

#ifdef TEST_MACRO
...
#warning TEST_MACRO_COMPILED
...
#endif

当您指定 -DTEST_MACRO

时,您应该会在编译期间看到此回显到输出中

(以上是一种有用的技术,可以避免在代码的生产/发布版本中错误地包含调试宏和其他您不想要的内容。)

当然,可能还有很多其他的可能性。如果测试宏包含可执行代码,您可以在其中放置一个 printf 语句,以在运行时查看证据。

关于c++ - 每次编译cuda源码时md5sum的值都会变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30419785/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com