c++ - 独立于平台的并行化而无需更改框架?

原文 标签 c++ parallel-processing platform-independence

希望标题不会误导您。

我的问题如下:当前,我尝试加快光线跟踪器的速度,这是在图形卡的帮助下完成的。尽管它变慢了,但它仍然可以正常工作。 :)

这是由于以下事实造成的:我立即在图形卡(我的“跟踪服务器”)上跟踪整个几何图形中的一条射线,然后获取结果,这非常慢,因此我必须收集一些射线并计算它们并一起提取结果以加快速度。

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

所以这是我的方法:
我考虑过要使用多个线程,每个线程都会发出光线,并请求我的“追踪服务器”计算交点。然后停止线程,直到聚集了足够多的光线以计算图形卡上的交点并有效地返回结果。这意味着每个线程将等待直到获取结果。

您看到我已经有一些计划,但是以下我不知道:


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


但是我也可以想象用一个线程执行此操作


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


另外,如果您有更好的主意如何将其并行化,请告诉我。

问候,

没有人

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

最佳答案

使用线程构建块或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?

相关文章:

c++ - 性病队列:高效还是过度?

linux - 您如何为PIGZ(parallel gzip)准备放气流?

python - Python,读取许多文件并合并结果

python - 与操作系统无关的方法,可使用Python快速查找文件

c++ - 提升asio写/读向量

c++ - 通过模板化(静态)成员函数访问受保护的成员

c++ - 模板元编程,如何专门研究集合

c++ - OpenMP:for循环避免在不使用关键操作的情况下进行数据争用

java - Java中与系统无关的计算机关闭

java - 本机方法和平台独立性