GCC-Go - 针对特定架构优化构建
GCC-Go - Optimize builds for specific architecture
如何使用环境变量来优化 go 二进制文件?
例如,对于 C 和 GCC,您可以将 CFLAGS="-O2 -march=znver1
设置为使用第 2 层优化构建,并针对 Zen 微体系结构进行特定优化。
我在 Golang 的文档中找不到等效的环境变量。
Go 确实提供了一种方法来禁用它们,但没有指定在您使用 gccgo 作为编译器后端时使用哪个。因此,它与一般情况下关于 Go 优化标志的其他问题非常不同(例如 Passing an optimization flag to a Go compiler?)
找了半天,找到了我需要的资料。
首先,如Adrian mentionned, the standard gc compiler (which is usually the most up-to-date regarding the Go spec), does not support optimization flags (except for disabling them completely using -N -l
as 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
,这正是我正在寻找的。
编辑:经过多次测试,似乎Go经常忽略这个环境变量,所以你必须添加-gccgoflags="${GOGCCFLAGS}"
。
编辑 25/01/2022: 从 Go 1.18 开始,添加了 GOAMD64
环境变量,允许您选择目标 x86_64
feature-level(从 v1
到 v4
)。
默认值为 GOAMD64=v1
,但如果您知道您将只针对比 Sandy Brige 或 Bulldozer 更新的 CPU,您可以安全地使用GOAMD64=v2
获得一些性能。
ARM 存在类似的环境变量。
您可以在此处获得更多详细信息:https://github.com/golang/go/wiki/MinimumRequirements#microarchitecture-support
如何使用环境变量来优化 go 二进制文件?
例如,对于 C 和 GCC,您可以将 CFLAGS="-O2 -march=znver1
设置为使用第 2 层优化构建,并针对 Zen 微体系结构进行特定优化。
我在 Golang 的文档中找不到等效的环境变量。
Go 确实提供了一种方法来禁用它们,但没有指定在您使用 gccgo 作为编译器后端时使用哪个。因此,它与一般情况下关于 Go 优化标志的其他问题非常不同(例如 Passing an optimization flag to a Go compiler?)
找了半天,找到了我需要的资料。
首先,如Adrian mentionned, the standard gc compiler (which is usually the most up-to-date regarding the Go spec), does not support optimization flags (except for disabling them completely using -N -l
as 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
,这正是我正在寻找的。
编辑:经过多次测试,似乎Go经常忽略这个环境变量,所以你必须添加-gccgoflags="${GOGCCFLAGS}"
。
编辑 25/01/2022: 从 Go 1.18 开始,添加了 GOAMD64
环境变量,允许您选择目标 x86_64
feature-level(从 v1
到 v4
)。
默认值为 GOAMD64=v1
,但如果您知道您将只针对比 Sandy Brige 或 Bulldozer 更新的 CPU,您可以安全地使用GOAMD64=v2
获得一些性能。
ARM 存在类似的环境变量。 您可以在此处获得更多详细信息:https://github.com/golang/go/wiki/MinimumRequirements#microarchitecture-support