【问题标题】:Matlab parallel programmingMatlab并行编程
【发布时间】: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


【解决方案1】:

parfor 只是 Parallel Computing Toolbox 提供的一项功能。它是最简单的,而且大多数人认为它最直接有用,这可能就是为什么您的研究发现的大多数资源都只讨论它的原因。

parfor 为您提供了一种非常简单地并行化“令人尴尬的并行”任务的方法,换句话说,这些任务是独立的并且不需要它们之间的任何通信(例如,参数扫描或蒙特卡洛分析)。

听起来这不是你需要的。根据您的问题,我不完全确定您确实需要什么;但是由于您提到了同步、障碍和等待一项任务完成后再进行另一项任务,我建议您查看 Parallel Computing Toolbox 的功能,例如 labSendlabReceivelabBarrier 和 @987654326 @,它允许您实现更多消息传递的并行化风格。工具箱中的功能远不止parfor

另外 - 不要害怕向 MathWorks 寻求建议,有几个(免费)录制的关于这种并行化的网络研讨会和教程,他们可以为您指明方向。

希望有帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-22
    • 2017-07-16
    • 1970-01-01
    相关资源
    最近更新 更多