gpt4 book ai didi

c - 像 OpenMP 这样的 golang 中有一个简单的 `parallel for` 吗?

转载 作者:数据小太阳 更新时间:2023-10-29 03:27:17 27 4
gpt4 key购买 nike

我正在尝试使用并行处理优化拼图,以获得更好的性能。

理想情况下,在带有 OpenMP 的 C99 中,我应该能够在有问题的 for 循环之前借助 #pragma omp parallel for 来做到这一点,然后应该由系统在 CPU 之间分配负载。

Go 的官方文档位于 https://golang.org/doc/effective_go.html#parallel ,但是,似乎表明对于并行处理,我必须,(0),手动从运行时环境中获取内核数量,(1),遍历所述内核,(2),有效地为每个内核编写一个不同的 for 循环核心,(3),再次遍历核心以确保所有内容都得到处理。

我错过了什么吗?对于最简单的情况,使用古老 C 的 OpenMP 是否优于被吹捧为 C 的最佳替代品的全新 Go?举一个更复杂的例子,你如何在 CPU 之间分割一个 range

最佳答案

Effective Go 已经过时了,Go 会自动将 GOMAXPROCS 设置为处理器的数量(您仍然可以手动设置它以强制使用您想要的数量)。

这是一个非常简单的 slice 并行处理示例:

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()

playground

关于c - 像 OpenMP 这样的 golang 中有一个简单的 `parallel for` 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36949303/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com