Changes in benchmark/readyQ/cycle.go [2c7eee0:7a2a3af]
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
benchmark/readyQ/cycle.go
r2c7eee0 r7a2a3af 2 2 3 3 import ( 4 "bufio" 4 5 "flag" 5 6 "fmt" 7 "os" 8 "runtime" 6 9 "sync/atomic" 7 10 "time" … … 9 12 "golang.org/x/text/message" 10 13 ) 14 15 var clock_mode bool 16 var threads_left int64 17 var stop int32 18 var duration float64 19 var stop_count uint64 20 21 func fflush(f *bufio.Writer) { 22 defer f.Flush() 23 f.Write([]byte("\r")) 24 } 25 26 func wait(start time.Time, is_tty bool) { 27 f := bufio.NewWriter(os.Stdout) 28 tdur := time.Duration(duration) 29 for true { 30 time.Sleep(100 * time.Millisecond) 31 end := time.Now() 32 delta := end.Sub(start) 33 if is_tty { 34 fmt.Printf(" %.1f",delta.Seconds()) 35 fflush(f) 36 } 37 if clock_mode && delta >= (tdur * time.Second) { 38 break 39 } else if !clock_mode && atomic.LoadInt64(&threads_left) == 0 { 40 break 41 } 42 } 43 } 11 44 12 45 func partner(result chan uint64, mine chan int, next chan int) { … … 25 58 26 59 func main() { 60 var nprocs int 61 var nthreads int 27 62 var ring_size int 28 63 64 nprocsOpt := flag.Int("p", 1, "The number of processors") 65 nthreadsOpt := flag.Int("t", 1, "The number of threads") 29 66 ring_sizeOpt := flag.Int("r", 2, "The number of threads per cycles") 67 durationOpt := flag.Float64("d", 0, "Duration of the experiment in seconds") 68 stopOpt := flag.Uint64("i", 0, "Duration of the experiment in iterations") 30 69 31 bench_init()70 flag.Parse() 32 71 72 nprocs = *nprocsOpt 73 nthreads = *nthreadsOpt 33 74 ring_size = *ring_sizeOpt 75 duration = *durationOpt 76 stop_count = *stopOpt 34 77 78 if duration > 0 && stop_count > 0 { 79 panic(fmt.Sprintf("--duration and --iterations cannot be used together\n")) 80 } else if duration > 0 { 81 clock_mode = true 82 stop_count = 0xFFFFFFFFFFFFFFFF 83 fmt.Printf("Running for %f seconds\n", duration) 84 } else if stop_count > 0 { 85 clock_mode = false 86 fmt.Printf("Running for %d iterations\n", stop_count) 87 } else { 88 duration = 5 89 clock_mode = true 90 fmt.Printf("Running for %f seconds\n", duration) 91 } 92 93 runtime.GOMAXPROCS(nprocs) 35 94 tthreads := nthreads * ring_size 36 95 threads_left = int64(tthreads) … … 67 126 68 127 p := message.NewPrinter(language.English) 69 p.Printf("Duration (ms) 70 p.Printf("Number of processors 71 p.Printf("Number of threads 72 p.Printf("Cycle size (# thrds) 73 p.Printf(" Total Operations(ops): %15d\n", global_counter)74 p.Printf(" Yields per second : %18.2f\n", float64(global_counter) / delta.Seconds())75 p.Printf(" ns per ops : %18.2f\n", float64(delta.Nanoseconds()) / float64(global_counter))76 p.Printf(" Ops per threads: %15d\n", global_counter / uint64(tthreads))77 p.Printf(" Ops per procs: %15d\n", global_counter / uint64(nprocs))78 p.Printf(" Ops/sec/procs: %18.2f\n", (float64(global_counter) / float64(nprocs)) / delta.Seconds())79 p.Printf("ns per ops/procs: %18.2f\n", float64(delta.Nanoseconds()) / (float64(global_counter) / float64(nprocs)))128 p.Printf("Duration (ms) : %f\n", delta.Seconds()); 129 p.Printf("Number of processors: %d\n", nprocs); 130 p.Printf("Number of threads : %d\n", tthreads); 131 p.Printf("Cycle size (# thrds): %d\n", ring_size); 132 p.Printf("Yields per second : %18.2f\n", float64(global_counter) / delta.Seconds()) 133 p.Printf("ns per yields : %18.2f\n", float64(delta.Nanoseconds()) / float64(global_counter)) 134 p.Printf("Total yields : %15d\n", global_counter) 135 p.Printf("Yields per threads : %15d\n", global_counter / uint64(tthreads)) 136 p.Printf("Yields per procs : %15d\n", global_counter / uint64(nprocs)) 137 p.Printf("Yields/sec/procs : %18.2f\n", (float64(global_counter) / float64(nprocs)) / delta.Seconds()) 138 p.Printf("ns per yields/procs : %18.2f\n", float64(delta.Nanoseconds()) / (float64(global_counter) / float64(nprocs))) 80 139 81 140 }
Note: See TracChangeset
for help on using the changeset viewer.