gpt4 book ai didi

arrays - 并行处理数组 : any risk of to much threads?

转载 作者:IT王子 更新时间:2023-10-29 02:23:23 26 4
gpt4 key购买 nike

我还有一个关于我之前的帖子的问题 Processing array in Go parallel : 假设我的数组非常大,例如

a1 := []int{0, 1, 2, 3, 4...1000}
a2 := []int{10, 20, 30, 40, 50...10000}

and I have only 4 cpus :

runtime.GOMAXPROCS(4)
var wg sync.WaitGroup

Is the following code still correct ?

for i := 1; i < 1000; i++ {
wg.Add(1)
go func(i int) {
defer wg.Done()
x := process_array(a1[i], a2[i])
fmt.Println(a1[i], "+", a2[i], "=", x)
}(i)
}
wg.Wait()

也就是说,runtime.GOMAXPROCS(4)会限制线程数为4个,不然,会出现1000个线程“累加”的问题?感谢您的评论!

最佳答案

编写并行代码以提高速度时,永远记住Amdahl's Law .他的法则就何时停止打扰提供了一个非常有用的经验法则,可以解释为“顺序位将成为瓶颈”。

如果您忽视阿姆达尔定律,您最终可能会浪费时间追逐不可能实现的目标。相反,您可能需要考虑更广泛的并发问题,以便在不止一个地方或以不止一种方式解决任何性能问题。

通常,您使用的方法是数据并行的:跨多个进程的数据结构的独立段的“几何”分解。

您还可以考虑功能分解(本质上是管道),其中不同的阶段执行不同的工作。

然后是特殊的时间情况,使用 master-worker 或“数据农场”作为实现并行性的一种方式。

所有这些往往需要真正并行的硬件才能真正发挥作用。 Tidmus/Chalmers 实用并行处理:并行问题解决简介(ISBN 1850321353)中对使用这些技术的多处理进行了很好但古老的总结。

关于arrays - 并行处理数组 : any risk of to much threads?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36104020/

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