view twice.go @ 0:fbb932a7214b default tip

Add twice.go
author Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
date Tue, 30 Jan 2018 14:26:41 +0900
parents
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;
    }
    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")
        }
    }
}