-
Notifications
You must be signed in to change notification settings - Fork 18.5k
Open
Labels
Milestone
Description
Currently go tool schedules work in topological order, this leads to suboptimal parallelization. It's possible that towards end, very few work items are available leading to idle processors. Critical path scheduling gives much better results in this respect: http://en.wikipedia.org/wiki/Critical_path_method Here is a prototype CL: https://golang.org/cl/13235046/diff/3001/src/cmd/go/build.go I've observed up to 2x 'go test -a std' speedup on a 32-way machine. We can also assign meaningful weights to work nodes: e.g. test > link > compile. It would also be super useful to somehow assign weights to test nodes proportional to test run time (e.g. runtime tests take significantly more than than most packages). This will have significant effect even on low-core machines (as runtime tests will start first).
coilysiren and emcfarlanecoilysiren