我已经建立了一个流行的数学模型,它在 Go 中的计算量相当大。我现在正在尝试构建一组系统来测试我的模型,在那里我更改输入并期望不同的输出。我构建了一个系列版本,以缓慢增加艾滋病毒流行率并查看对艾滋病毒死亡的影响。运行大约需要 200 毫秒。
for q = 0.0; q < 1000; q++ {
inputs.CountryProfile.HivPrevalenceAdultsByGroup[0] = inputs.CountryProfile.HivPrevalenceAdultsByGroup[0] * float32(math.Pow(1.00001, q))
results := costAnalysisHandler(inputs)
fmt.Println(results.HivDeaths[20])
}
然后我使用通道制作了一个“并行”版本,它需要更长的时间,大约 400 毫秒才能运行。这些小的变化很重要,因为我们将使用不同的输入运行数百万次,因此希望使其尽可能高效。这是并行版本:
ch := make(chan ChData)
var q float64
for q = 0.0; q < 1000; q++ {
go func(q float64, inputs *costanalysis.Inputs, ch chan ChData) {
inputs.CountryProfile.HivPrevalenceAdultsByGroup[0] = inputs.CountryProfile.HivPrevalenceAdultsByGroup[0] * float32(math.Pow(1.00001, q))
results := costAnalysisHandler(inputs)
fmt.Println(results.HivDeaths[20])
ch <- ChData{int(q), results.HivDeaths[20]}
}(q, inputs, ch)
}
for q = 0.0; q < 1000; q++ {
theResults := <-ch
fmt.Println(theResults)
}
任何想法都非常感谢。
MYYA
相关分类