gpt4 book ai didi

go - GCC-Go - 针对特定架构优化构建

转载 作者:行者123 更新时间:2023-12-05 09:37:21 31 4
gpt4 key购买 nike

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

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

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

最佳答案

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

但是,如果您使用 GCCGO,则可以使用一个环境变量,即 GOGCCFLAGS .使用 go env在我安装了 gcc-go 的系统上,我看到它的默认值是 -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例如,这正是我正在寻找的。

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

编辑 25/01/2022: 自 Go 1.18 以来,GOAMD64添加了环境变量,允许您选择目标 x86_64特征级(从 v1v4 )。默认值为 GOAMD64=v1 , 但如果你知道你只会针对比 Sandy BrigeBulldozer 更新的 CPU,你可以安全地使用 GOAMD64=v2以获得一些性能。

ARM 也有类似的环境变量。您可以在此处获得更多详细信息:https://github.com/golang/go/wiki/MinimumRequirements#microarchitecture-support

关于go - GCC-Go - 针对特定架构优化构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64268570/

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