【问题标题】:How to do threading in MATLAB?如何在 MATLAB 中进行线程化?
【发布时间】:2010-04-26 12:00:37
【问题描述】:

如何在 MATLAB 中进行线程化?我想同时对两个变量运行一个函数。我该怎么做?

【问题讨论】:

  • @hai:请不要发布重复的问题。如果您之前的问题([admin: now this question])没有得到您喜欢的答案,那么您应该编辑它以使您的问题更清楚。

标签: matlab function multithreading parallel-processing


【解决方案1】:

并行工具箱中的一些工具可能会对您有所帮助。在下面找到一些从 Matlab 帮助中粘贴的示例

matlabpool    % Use default parallel configuration
spmd          % By default uses all labs in the pool
    INP = load(['somedatafile' num2str(labindex) '.mat']);
    RES = somefun(INP);
end

然后,实验室上的 RES 的值可以从客户端访问,如实验室 1 中的 RES{1}、实验室 2 中的 RES{2} 等。

您也可以将parfor 视为for 的简单并行替换。希望这会有所帮助,即使它不是您想要的。

【讨论】:

  • 在 R2015 中,matlabpool 函数已从 Matlab 中删除,您需要改为调用 parpool。
【解决方案2】:

我不相信 MATLAB 有任何内置的多线程支持。 这来自我最近与同事的一次谈话和quick google search

希望这会有所帮助。

【讨论】:

  • 是的。这是使用 Matlab 制作生产应用程序的问题之一。
  • 随着每个新版本的发布,越来越多的 Matlab 原生函数是多线程的,以利用多核 CPU。但是像 Matlab 这样的工具的整体理念是反对让用户亲自访问线程等。
  • 来自 Matlab 帮助:“隐式多处理”使用内置多线程函数或“显式多处理”,您必须使用并行计算工具箱。
【解决方案3】:

您可以使用 MEX 文件和 std::thread(请参阅 here)。

我没有尝试从 MEX 文件中调用 mexEvalString,它很可能会导致运行时错误或在执行时冻结 MATLAB。但是,如果您可以用 C++ 编写特定的代码,它可能就是您想要的。

【讨论】:

    猜你喜欢
    • 2011-10-23
    • 1970-01-01
    • 1970-01-01
    • 2013-08-05
    • 2012-11-18
    • 2018-07-27
    • 2012-10-25
    • 1970-01-01
    • 2018-03-27
    相关资源
    最近更新 更多