# HG changeset patch # User Tatsuki IHA # Date 1517290001 -32400 # Node ID fbb932a7214bb3d25f8a0e5a67e67a6b5252eb7d Add twice.go diff -r 000000000000 -r fbb932a7214b twice.go --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/twice.go Tue Jan 30 14:26:41 2018 +0900 @@ -0,0 +1,52 @@ +package main + +import ( + "flag" + "fmt" + "runtime" + "time" +) + +func twice(list []int, prefix int, index int, c chan []int) { + for i := 0; i < prefix; i++ { + list[prefix*index+i] = list[prefix*index+i] * 2; + } + c <- list +} + +func main() { + length := flag.Int("l", 1024, "length") + split := flag.Int("s", 8, "task size") + cpu := flag.Int("cpu", 1, "cpu") + flag.Parse() + + fmt.Println("length: ", *length); + prefix := *length / *split + fmt.Println("length/task: ", prefix); + fmt.Println("cpu :", *cpu); + + list := []int{}; + for i :=0; i < *length; i++ { + list = append(list, i); + } + + runtime.GOMAXPROCS(*cpu) + + c := make(chan []int) + start := time.Now() + for i :=0; i < *split; i++ { + go twice(list, prefix, i, c); + } + + for i :=0; i < *split; i++ { + <- c + } + t := time.Now() + elapsed := t.Sub(start) + fmt.Println(elapsed) + for i :=0; i < *length; i++ { + if (i*2 != list[i]) { + fmt.Println("wrong result") + } + } +}