cns*_*nst 2 c parallel-processing openmp go
我正在尝试使用并行处理优化拼图,以获得更好的性能.
理想情况下,在C99 w/OpenMP中,我应该能够在有问题#pragma omp parallel for的for循环之前做到这一点,然后应该由系统来分配CPU之间的负载.
对于围棋在官方文档https://golang.org/doc/effective_go.html#parallel,然而,似乎表明,并行处理,我必须,(0),手动从运行环境获取核心数量,( 1),遍历所述核心,(2),有效地为每个核心编码一个不同的for循环,(3),再次在核心上循环以确保所有的东西都得到处理.
我错过了什么吗?对于最简单的情况,OpenMP与古老的C优于全新的Go,被吹捧为C的最佳替代品吗?对于一个更复杂的例子,你究竟是如何range在CPU之间拆分的?
Effective Go已经过时了,Go会自动将GOMAXPROCS设置为处理器数量(您仍然可以手动设置它以强制使用您想要的数字).
这里是切片并行处理的一个非常简单的例子:
data := make([]float64, SZ)
var wg sync.WaitGroup
for i := range data {
wg.Add(1)
go func(v *float64) {
// note that using rand is a bad example because global rand uses a mutex
*v = rand.Float64()
wg.Done()
}(&data[i])
}
wg.Wait()
Run Code Online (Sandbox Code Playgroud)