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")
        }
    }
}