【发布时间】:2014-04-14 09:40:31
【问题描述】:
首先,对于笼统的标题,很可能,对于笼统的问题,我们深表歉意。
我面临两难境地,我一直使用 C++ 工作,现在我正在尝试做一些与我之前的项目非常相似的事情,即并行化一个用 matlab 编写的单目标对象跟踪器,以便为每个并发线程分配一个对象,然后在每一帧收集结果。在 c++ 中,我使用 boost thread API 来执行此操作,并且效果很好。在matlab中可以吗?阅读周围我发现它很不清楚,我正在阅读很多关于parfor 循环的内容,但仅此而已?我可以施加类似于boost::barrier 的同步障碍,以便在每一帧之后停止每个线程并在进入下一帧之前等待其他线程吗?
基本上,我希望初始化一些常见的数据结构,然后启动跟踪器的一些并行实例,它们共享一些数据并以不同的对象作为输入进行跟踪。任何建议将不胜感激!
【问题讨论】:
-
parfor具有限制性,但如果您遵守其规则,则确实可以极大地提高速度。有时,从命令行调用多个单个 matlab 实例可以为您提供更多控制权。 -
据我所知,
parfor的一个要求是运行进程的严格独立性。所以你问什么取决于你认为你会安排你的进程调度的方式。 -
事实是我需要同时运行不同的实例,可能在每一帧之后显示结果,这本质上需要多个实例之间的某种同步。我开始认为这不能在matlab中完成,对吗?除了一些只读变量之外,各种实例没有任何共同点(如果这是一个问题,我总是可以复制这些变量,但我认为我现在有更大的问题)
-
@powder,我建议更清楚地说明您愿意在问题中获得的效果。我想正确地重新安排循环可以做一些事情,但是很可能你将无法达到 c++ 性能(甚至到目前为止。)
标签: multithreading matlab image-processing parallel-processing