1

我希望标题没有误导你。

我的问题如下:目前我尝试加速光线追踪器,这是在显卡的帮助下完成的。尽管它因此变慢了,但它工作正常。:)

这是因为我在显卡(我的“跟踪服务器”)上一次在整个几何图形上跟踪一条光线,然后获取结果,这非常慢,所以我必须收集一些光线并计算它们并一起获取结果以加快速度。

下一个问题是,我不允许重写对这种并行化一无所知或最不可能知道的周围框架。

所以这是我的方法:我考虑过使用多个线程,每个线程都获取一条射线并请求我的“跟踪服务器”计算交叉点。然后线程停止,直到收集到足够的光线来计算显卡上的交点并有效地返回结果。这意味着每个线程都将等待,直到获取结果。

你看我已经有一些计划但是我不知道:

  • 我应该采用哪个线程框架独立于平台?
  • 我应该使用固定大小的线程池还是根据需要创建它们?
  • 任何给定的线程库都可以处理至少 1000 个等待线程(因为这将是我需要收集的数量才能使我的 fetch 有效)?

但我也可以想象用一个线程来做这件事

  1. 将其负载(新光线)转储到“跟踪服务器”并获取下一个负载,直到
  2. 有足够的获取结果。
  3. 然后线程将一一获取结果,进行进一步的计算,直到处理完所有结果,然后返回到第一步,直到完成所有光线。

另外,如果您对如何并行化有更好的想法,请告诉我。

问候,

没有人

PS 如果您需要此信息:我要使用的两个平台是 Linux 和 Windows。

4

1 回答 1

2

使用线程构建块或 boost::thread。

http://www.boost.org/doc/libs/1_46_0/doc/html/thread.html

http://threadingbuildingblocks.org/

至于线程池/按需线程 - 线程池通常是更好的主意,因为它避免了创建开销。

等待线程的数量将取决于底层系统,而不是其他任何东西:

Linux中每个进程的最大线程数?

于 2011-07-09T16:30:38.673 回答