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() ...@@ -40,3 +40,6 @@ func LockOSThread()
// If the calling goroutine has not called LockOSThread, UnlockOSThread is a no-op. // If the calling goroutine has not called LockOSThread, UnlockOSThread is a no-op.
func UnlockOSThread() 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) ...@@ -807,6 +807,29 @@ runtime·LockOSThread(void)
g->lockedm = m; 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 void
runtime·UnlockOSThread(void) runtime·UnlockOSThread(void)
{ {
...@@ -821,4 +844,3 @@ runtime·mid(uint32 ret) ...@@ -821,4 +844,3 @@ runtime·mid(uint32 ret)
ret = m->id; ret = m->id;
FLUSH(&ret); FLUSH(&ret);
} }
...@@ -40,6 +40,7 @@ import ( ...@@ -40,6 +40,7 @@ import (
"flag"; "flag";
"fmt"; "fmt";
"math"; "math";
"runtime";
) )
var n = flag.Int("n", 2000, "count") var n = flag.Int("n", 2000, "count")
...@@ -92,6 +93,7 @@ func (v Vec) ATimesTransp(u Vec) { ...@@ -92,6 +93,7 @@ func (v Vec) ATimesTransp(u Vec) {
func main() { func main() {
flag.Parse(); flag.Parse();
runtime.GOMAXPROCS(*nCPU);
N := *n; N := *n;
u := make(Vec, N); u := make(Vec, N);
for i := 0; i < N; i++ { 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