]> Cypherpunks repositories - gostls13.git/commitdiff
[dev.link] cmd/link run generators in parallel
authorJeremy Faller <jeremy@golang.org>
Mon, 28 Sep 2020 18:11:02 +0000 (14:11 -0400)
committerJeremy Faller <jeremy@golang.org>
Wed, 30 Sep 2020 19:34:13 +0000 (19:34 +0000)
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 <jeremy@golang.org>
Run-TryBot: Jeremy Faller <jeremy@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Austin Clements <austin@google.com>
src/cmd/link/internal/ld/main.go

index 6f4ccbfb7a11be4d0910819102a0867fb88ad458..778b0e9245aba78342ebb0785bc3383d1cc00b89 100644 (file)
@@ -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)