【问题标题】:GCC-Go - Optimize builds for specific architectureGCC-Go - 优化特定架构的构建
【发布时间】:2021-01-23 20:35:15
【问题描述】:

如何使用环境变量来优化 go 二进制文件?

例如,对于 C 和 GCC,您可以将 CFLAGS="-O2 -march=znver1 设置为使用第 2 层优化进行构建,并针对 Zen 微架构进行特定优化。 我在 Golang 的文档中找不到等效的环境变量。

Go 确实提供了一种禁用它们的方法,但如果您使用 gccgo 作为编译器后端,则不指定使用哪一个。因此,它与其他关于 Go 优化标志的一般问题非常不同(例如Passing an optimization flag to a Go compiler?

【问题讨论】:

  • Go 的编译器没有优化级别(只有禁用优化的选项,默认启用),并且针对构建目标的架构进行了优化,没有更具体的可用。跨度>
  • 哦,我不知道!另外,我在某处看到如果使用 gccgo 构建,您可以添加优化。我说的对吗?
  • @Adrian GCC-GO 实际上可以优化特定架构的构建,因为它使用 GCC 的后端。

标签: go compilation environment-variables compiler-optimization gccgo


【解决方案1】:

找了半天,终于找到了我需要的资料。 首先,正如Adrian 所提到的,标准 gc 编译器(通常是关于 Go 规范的最新版本)不支持优化标志(除了使用 -N -l 完全禁用它们作为 mentionned here .

但是,如果您使用 GCCGO,则可以使用一个环境变量,即GOGCCFLAGS。 在我安装了 gcc-go 的系统上使用go env,我看到它的默认值是-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build920233973=/tmp/go-build -gno-record-gcc-switches -funwind-tables。 因此,可以覆盖此环境变量并传递其他优化,如GCCGO's documentation 中描述的那些。 标准 gcc 选项似乎可以工作,例如 -march=native,这正是我正在寻找的。​​p>

编辑:经过更多测试,似乎Go经常忽略这个环境变量,所以你必须添加-gccgoflags="${GOGCCFLAGS}"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-30
    • 1970-01-01
    • 1970-01-01
    • 2013-01-02
    • 2017-02-05
    • 2017-09-06
    • 2017-06-29
    • 2010-09-12
    相关资源
    最近更新 更多