平台独立并行化而不改变框架?

时间:2011-07-09 16:20:17

标签: c++ parallel-processing platform-independence

我希望这个标题不会误导你。

我的问题如下:目前我尝试加速光线跟踪器,这是在显卡的帮助下完成的。尽管事情变得缓慢,但它工作得很好。 :)

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

接下来的问题是,我不允许重写周围的框架,该框架应该对此并行化一无所知或最不可能。

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

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

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

但我也可以想象用一个

的线程来做这件事
  1. 将其负载(新光线)转储到“跟踪服务器”并获取下一个负载,直到
  2. 足以获取结果。
  3. 然后线程将逐个获取结果,进行进一步的计算,直到处理完所有结果,然后返回到第一步,直到完成所有光线。
  4. 此外,如果你有更好的想法如何并行化这个,请告诉我。

    此致

    没有人

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

1 个答案:

答案 0 :(得分:2)

使用Thread Building Blocks或boost :: thread。

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

http://threadingbuildingblocks.org/

就线程池/按需线程而言 - 线程池通常更好主意,因为它避免了创建开销。

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

Maximum number of threads per process in Linux?