Mercurial > hg > Papers > 2021 > soto-prosym
view Paper/src/go.go @ 14:393c839f987b default tip
DONE
author | soto <soto@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Sat, 08 Jan 2022 12:41:39 +0900 |
parents | c59202657321 |
children |
line wrap: on
line source
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; //listを掛け算 } 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); //list の長さ prefix := *length / *split //length / task size fmt.Println("length/task: ", prefix); fmt.Println("cpu :", *cpu); //list の作成 list := []int{}; for i :=0; i < *length; i++ { list = append(list, i); } runtime.GOMAXPROCS(*cpu) //並列処理するために値を代入 c := make(chan []int) //channel 作成 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") } } }