in go/distinct_count_accuracy_profile.go [68:120]
func (d *DistinctCountAccuracyProfile) run() {
minT := 1 << d.config.lgMinT
maxT := 1 << d.config.lgMaxT
maxU := 1 << d.config.lgMaxU
vIn := uint64(0)
// This will generate a table of data for each intermediate Trials point
lastTpt := 0
for lastTpt < maxT {
nextT := lastTpt
if lastTpt == 0 {
nextT = minT
} else {
nextT = int(pwr2SeriesNext(d.config.tppo, uint64(lastTpt)))
}
delta := nextT - lastTpt
for i := 0; i < delta; i++ {
vIn = d.runTrial(vIn)
}
lastTpt = nextT
sb := &strings.Builder{}
if nextT < maxT {
if d.config.interData {
sb.Reset()
d.setHeader(sb)
d.process(lastTpt, sb)
fmt.Println(sb.String())
}
} else {
sb.Reset()
d.setHeader(sb)
d.process(lastTpt, sb)
fmt.Println(sb.String())
}
fmt.Printf("Config: : %+v\n", d.config)
fmt.Printf("Cum Trials : %d\n", lastTpt)
fmt.Printf("Cum Updates : %d\n", vIn)
currentTime_mS := time.Now().UnixMilli()
cumTime_mS := currentTime_mS - d.startTime
fmt.Printf("Cum Time : %s\n", time.Duration(cumTime_mS*1000*1000))
timePerTrial_mS := float64(cumTime_mS) / float64(lastTpt)
avgUpdateTime_ns := timePerTrial_mS * 1e6 / float64(maxU)
fmt.Printf("Time Per Trial, mSec: %f\n", timePerTrial_mS)
fmt.Printf("Avg Update Time, nSec: %f\n", avgUpdateTime_ns)
fmt.Printf("Date Time : %s\n", time.Now().Format(time.RFC3339))
timeToComplete_mS := int64(timePerTrial_mS * float64(maxT-lastTpt))
fmt.Printf("Est Time to Complete: %s\n", time.Duration(timeToComplete_mS*1000*1000))
fmt.Printf("Est Time at Completion: %s\n", time.Now().Add(time.Duration(timeToComplete_mS*1000*1000)).Format(time.RFC3339))
fmt.Println("")
}
}