gpt4 book ai didi

multithreading - 我应该同时使用线程和递归吗?

转载 作者:行者123 更新时间:2023-12-04 06:01:40 25 4
gpt4 key购买 nike

我已经修补BSP树已有一段时间了,并且还在玩线程。将三角形添加到BSP树中时,就有机会创建一个新线程以并行处理数据。

插入(三角形,bspnode)
{
....
否则if(三角形跨越bspnode)
{
(前片,后片)= plane_split(三角形,bspnode)

插入(frontpiece,bspnode.front)
插入(backpiece,bspnode.back)
}
....
}

上面的两个插入操作可以由两个线程执行,并且由于它们不修改相同的数据,因此可以使用便宜的同步。

插入(三角形,bspnode)
{
....
否则if(三角形跨越bspnode)
{
(前片,后片)=分割(三角形,bspnode)

句柄= beginthread(insert(backpiece,bspnode.front))
insert(frontpiece,bspnode.back)
如果(句柄)
{
waitforthread(句柄)
}
别的
{
插入(后置镜头,bspnode.front)
}
}
....
}

此新方法尝试创建一个线程以并行完成操作,但是如果无法创建该线程,则该方法不应失败(它将简单地还原为原始算法)。

这是一种良好的编程习惯,还是我使用线程的方式不正确?我没有找到有关此技术的任何文献。我喜欢它趋向于充分利用我的CPU(2个内核),并且理论上可以扩展到任意数量的可用处理器。我不喜欢这可能会浪费大量的CPU和内存。

最佳答案

如果处理的某些部分正在外部(用户输入,I/O,某些其他处理)上等待,则线程非常有用-等待中的线程可以继续等待,而未等待的线程则在继续前进。

但是,对于处理密集型任务,实际上比处理器更多的线程会产生开销。看来您的线程正在完成所有的“CPU工作”,所以我会坚持每个核心使用一个线程-不过,请测试以找到最佳数量。

创建的最大开销来自上下文切换(卡住一个线程并加载下一个线程的执行上下文),以及线程执行具有不同内存的任务时(如果您的线程可以有效地使用CPU缓存)缓存丢失。

关于multithreading - 我应该同时使用线程和递归吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/167018/

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