From e674b7703e48e357cd46939413620f21cb84027d Mon Sep 17 00:00:00 2001 From: Jeremy Faller Date: Mon, 28 Sep 2020 14:11:02 -0400 Subject: [PATCH] [dev.link] cmd/link run generators in parallel MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Small runtime win: Stats for darwin, building cmd/compile: Asmb 20.7ms ±14% 18.3ms ±14% -11.54% (p=0.002 n=10+10) TotalTime 365ms ±10% 351ms ± 2% ~ (p=0.211 n=10+9) Change-Id: Ia8afdf6948111d59b0c89e52cb50557a10f33c40 Reviewed-on: https://go-review.googlesource.com/c/go/+/257964 Trust: Jeremy Faller Run-TryBot: Jeremy Faller TryBot-Result: Go Bot Reviewed-by: Austin Clements --- src/cmd/link/internal/ld/main.go | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/cmd/link/internal/ld/main.go b/src/cmd/link/internal/ld/main.go index 6f4ccbfb7a..778b0e9245 100644 --- a/src/cmd/link/internal/ld/main.go +++ b/src/cmd/link/internal/ld/main.go @@ -36,12 +36,14 @@ import ( "cmd/internal/objabi" "cmd/internal/sys" "cmd/link/internal/benchmark" + "cmd/link/internal/loader" "flag" "log" "os" "runtime" "runtime/pprof" "strings" + "sync" ) var ( @@ -324,9 +326,15 @@ func Main(arch *sys.Arch, theArch Arch) { bench.Start("Asmb") asmb(ctxt) // Generate large symbols. + var wg sync.WaitGroup for s, f := range ctxt.generatorSyms { - f(ctxt, s) + wg.Add(1) + go func(f generatorFunc, s loader.Sym) { + defer wg.Done() + f(ctxt, s) + }(f, s) } + wg.Wait() bench.Start("Asmb2") asmb2(ctxt) -- 2.51.0