Commit 7955490d authored by Rob Pike's avatar Rob Pike

add runtime.GOMAXPROCS, allowing a program to, in effect, set $GOMAXPROCS

R=rsc
DELTA=29  (28 added, 1 deleted, 0 changed)
OCL=32829
CL=32837
parent ae3939cb
......@@ -40,3 +40,6 @@ func LockOSThread()
// If the calling goroutine has not called LockOSThread, UnlockOSThread is a no-op.
func UnlockOSThread()
// GOMAXPROCS sets the maximum number of CPUs that can be executing
// simultaneously. This call will go away when the scheduler improves.
func GOMAXPROCS(n int)
......@@ -807,6 +807,29 @@ runtime·LockOSThread(void)
g->lockedm = m;
}
// delete when scheduler is stronger
void
runtime·GOMAXPROCS(int32 n)
{
if(n < 1)
n = 1;
lock(&sched);
sched.gomaxprocs = n;
sched.mcpumax = n;
// handle fewer procs
while(sched.mcpu > sched.mcpumax) {
noteclear(&sched.stopped);
sched.waitstop = 1;
unlock(&sched);
notesleep(&sched.stopped);
lock(&sched);
}
// handle more procs
matchmg();
unlock(&sched);
}
void
runtime·UnlockOSThread(void)
{
......@@ -821,4 +844,3 @@ runtime·mid(uint32 ret)
ret = m->id;
FLUSH(&ret);
}
......@@ -40,6 +40,7 @@ import (
"flag";
"fmt";
"math";
"runtime";
)
var n = flag.Int("n", 2000, "count")
......@@ -92,6 +93,7 @@ func (v Vec) ATimesTransp(u Vec) {
func main() {
flag.Parse();
runtime.GOMAXPROCS(*nCPU);
N := *n;
u := make(Vec, N);
for i := 0; i < N; i++ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment