从源代码构建 TensorFlow 时,-c opt 和 --config=opt 有什么区别?
What's the difference between -c opt and --config=opt when building TensorFlow from source?
从源代码构建 TensorFlow 时,我们被要求设置 --config=opt
(默认情况下将启用 gcc 标志 -march=native
),但在网络上我看到很多人使用 -c opt
而不是,但根据 Bazel 的文档 -c
实际上是 shorthand for --compilation_mode
而不是 --config
!
令人困惑的是,--compilation_mode
也将 'opt' 作为一个值,但我认为这只是巧合?有人可以澄清在 TensorFlow 编译期间执行 bazel build
时 -c opt
和 --config=opt
之间的区别吗?
-c opt
标志用于告诉 Bazel 在启用优化设置且没有调试信息的情况下进行构建。就像你提到的 --compilation_mode opt
。这与用于编译任何代码的标志有关。
--config=opt
告诉 Bazel,在编译期间查看 .bazelrc
文件并读取与 opt
配置相匹配的任何设置。在你 运行 你的 configure
脚本与 tensorflow 之后,你应该有一个 .bazelrc
文件位于你的工作空间的根目录中,它定义了多个配置的设置。对于 opt
配置,它添加了额外的 -march-native
用于编译。
所以它们以相同的方式命名有点巧合。但是 --config
是一个灵活的工具,可以从 .bazelrc
文件中选择 Bazel 设置。 -c
实际上只是用于优化代码构建。
--config
设置在 .rc 文件中定义的一组标志中扩展的配置。例如。如果 rc 文件包含 build:opt -c opt
,则在命令行上设置 --config opt
将扩展为 -c opt
。 tensorflow rc 文件 set -c opt
但未定义任何 opt
配置。所以设置 --config opt
什么都不做。
附录:TensorFlow 的 ./configure 在 opt 配置的 .bazelrc 上添加了一些 C++ 选项(因此它会扩展到那些 C++ 选项)。
从源代码构建 TensorFlow 时,我们被要求设置 --config=opt
(默认情况下将启用 gcc 标志 -march=native
),但在网络上我看到很多人使用 -c opt
而不是,但根据 Bazel 的文档 -c
实际上是 shorthand for --compilation_mode
而不是 --config
!
令人困惑的是,--compilation_mode
也将 'opt' 作为一个值,但我认为这只是巧合?有人可以澄清在 TensorFlow 编译期间执行 bazel build
时 -c opt
和 --config=opt
之间的区别吗?
-c opt
标志用于告诉 Bazel 在启用优化设置且没有调试信息的情况下进行构建。就像你提到的 --compilation_mode opt
。这与用于编译任何代码的标志有关。
--config=opt
告诉 Bazel,在编译期间查看 .bazelrc
文件并读取与 opt
配置相匹配的任何设置。在你 运行 你的 configure
脚本与 tensorflow 之后,你应该有一个 .bazelrc
文件位于你的工作空间的根目录中,它定义了多个配置的设置。对于 opt
配置,它添加了额外的 -march-native
用于编译。
所以它们以相同的方式命名有点巧合。但是 --config
是一个灵活的工具,可以从 .bazelrc
文件中选择 Bazel 设置。 -c
实际上只是用于优化代码构建。
--config
设置在 .rc 文件中定义的一组标志中扩展的配置。例如。如果 rc 文件包含 build:opt -c opt
,则在命令行上设置 --config opt
将扩展为 -c opt
。 tensorflow rc 文件 set -c opt
但未定义任何 opt
配置。所以设置 --config opt
什么都不做。
附录:TensorFlow 的 ./configure 在 opt 配置的 .bazelrc 上添加了一些 C++ 选项(因此它会扩展到那些 C++ 选项)。