每次编译cuda源码时md5sum的值都会变化
md5sum value changes every time I compile cuda source code
我试图通过 ubuntu 中的 md5sum 命令验证我的宏在编译期间是否真的有效。
例如,通过"nvcc -DTEST_MACRO ...."我得到了一个可执行文件A。
然后通过 "nvcc ..." 我得到了一个可执行文件 B。
当然 md5 值是不同的。
但是,我重新编译生成了A。它的md5和之前的不一样
我拿了一个纯c++的代码,用g++检查了一下,结果不管编译多少次,md5值都是一样的。所以我认为 nvcc 生成的可执行文件中有类似时间戳的东西。
- 出于好奇,如何验证我的想法是否正确?
- 无论如何,我如何验证 "TEST_MACRO" 在这种情况下是否真的有效?
我认为这种可变性不一定是由于嵌入的时间戳,而是 nvcc
构建可执行文件的方式。
nvcc
是一个编译器驱动程序,这意味着它会启动一系列命令 "under the hood" 来编译代码。在此序列的执行过程中,将使用随机生成的文件名创建各种临时文件。您可以通过查看添加了 -v
开关的 nvcc
编译命令的输出来了解这一点。
其中一些文件名 do 嵌入到可执行文件中,并且由于这些随机生成的文件名在 nvcc
编译命令的一次调用与下一次调用之间有所不同,生成的二进制文件会有所不同。
如果您想自己验证这一点,运行 您的 nvcc
命令添加了 -v
。然后检查最后的输出是否有 tmpxft...
文件名。然后grep为该文件名生成的可执行文件,例如:
grep tmpxft_0000a76e myexe
(将 tmpxft_0000a76e
替换为 nvcc
详细输出中出现的任何内容,并将 myexe
替换为可执行文件的实际名称。)
如果您想验证 TEST_MACRO 是否真的有效,有几个选项。最不打扰的可能是将以下行放在 TEST_MACRO 正文中:
#ifdef TEST_MACRO
...
#warning TEST_MACRO_COMPILED
...
#endif
并且当您指定 -DTEST_MACRO
时,您应该会在编译期间看到此回显到输出中
(以上是一种有用的技术,可以避免在 production/release 代码构建中错误地包含调试宏和其他您不想要的内容。)
当然,可能还有很多其他的可能性。如果测试宏包含可执行代码,您可以在其中放置一个 printf
语句,以便在 运行 时查看证据。
我试图通过 ubuntu 中的 md5sum 命令验证我的宏在编译期间是否真的有效。
例如,通过"nvcc -DTEST_MACRO ...."我得到了一个可执行文件A。 然后通过 "nvcc ..." 我得到了一个可执行文件 B。 当然 md5 值是不同的。 但是,我重新编译生成了A。它的md5和之前的不一样
我拿了一个纯c++的代码,用g++检查了一下,结果不管编译多少次,md5值都是一样的。所以我认为 nvcc 生成的可执行文件中有类似时间戳的东西。
- 出于好奇,如何验证我的想法是否正确?
- 无论如何,我如何验证 "TEST_MACRO" 在这种情况下是否真的有效?
我认为这种可变性不一定是由于嵌入的时间戳,而是 nvcc
构建可执行文件的方式。
nvcc
是一个编译器驱动程序,这意味着它会启动一系列命令 "under the hood" 来编译代码。在此序列的执行过程中,将使用随机生成的文件名创建各种临时文件。您可以通过查看添加了 -v
开关的 nvcc
编译命令的输出来了解这一点。
其中一些文件名 do 嵌入到可执行文件中,并且由于这些随机生成的文件名在 nvcc
编译命令的一次调用与下一次调用之间有所不同,生成的二进制文件会有所不同。
如果您想自己验证这一点,运行 您的 nvcc
命令添加了 -v
。然后检查最后的输出是否有 tmpxft...
文件名。然后grep为该文件名生成的可执行文件,例如:
grep tmpxft_0000a76e myexe
(将 tmpxft_0000a76e
替换为 nvcc
详细输出中出现的任何内容,并将 myexe
替换为可执行文件的实际名称。)
如果您想验证 TEST_MACRO 是否真的有效,有几个选项。最不打扰的可能是将以下行放在 TEST_MACRO 正文中:
#ifdef TEST_MACRO
...
#warning TEST_MACRO_COMPILED
...
#endif
并且当您指定 -DTEST_MACRO
(以上是一种有用的技术,可以避免在 production/release 代码构建中错误地包含调试宏和其他您不想要的内容。)
当然,可能还有很多其他的可能性。如果测试宏包含可执行代码,您可以在其中放置一个 printf
语句,以便在 运行 时查看证据。