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

希望标题不会误导您。

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

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

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

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

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


我应该采用哪个线程框架独立于平台?
我应该使用固定大小的线程池还是根据需要创建它们?
任何给定的线程库都可以处理至少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?

本文翻译自 https://stackoverflow.com/questions/6635985/

网站遵循 CC BY-SA 4.0 协议,转载或引用请注明出处。

标签 c++ parallel-processing platform-independence


相关文章:

python - OS X:ld:找不到-lstdc ++的库

linux - 多核处理器核心通信速度

java - 在Java中安全发布不可变对象

java - 通过平台独立的方式按文件类型触发外部应用程序/帮助程序?

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

c++ - 关闭管道不会中断从线程产生的子进程中的read()

c++ - 此代码有什么问题(基本C ++代码)

c++ - OpenCV CvSVM.predict()决策函数值

c# - 异步编程和多线程有什么区别?

java - 以与平台无关的方式将环境变量传递给JVM