【问题标题】:matlab bsxfun not multithreading?matlab bsxfun不是多线程?
【发布时间】:2012-06-10 12:03:01
【问题描述】:

我使用的是 Matlab R2011a,根据文档,bsxfun 函数自 R2009a 以来是多线程的 (http://www.mathworks.com/help/techdoc/rn/br5k34y-1.html)。但是,当我使用 bsxfun 将矩阵与这样的上限和下限进行比较时:

szS=10000;
szT=50000;
matT=rand(szT,3);
matS=rand(szS,3);
matSub=rand(szS,3);
matSlb=rand(szS,3);
for k=1:szS
   matchID = all([bsxfun(@lt,matT,matSub(k,:)) bsxfun(@gt,matT,matSlb(k,:))],2);
end

在我看到的任务管理器上只有一个核心被使用。是我遗漏了什么还是这正常吗?

【问题讨论】:

  • AFAIK 任务管理器只显示进程而不是线程.. 另外你应该知道multithreading 只有在数据足够大时才会启动
  • 另外,您能否解释一下代码中的变量,并给我们一个最低限度的工作示例。也许我们可以改进它
  • 在我的 4 核 8 线程机器上,当我执行 parfor 时,我得到 (Nw/8) 的 CPU 使用率,其中 Nw 是放入池中的工人数量。但是当我做 bsxfun 时,我得到了一个可靠的 %25。目标矩阵 (matT) 的维度为 (300K,3),我猜应该足够大。
  • 那些是not the same thingmatlabpool 在后面打开新的 MATLAB 会话,每个会话都在一个单独的进程中。当您使用parfor 时,它会将负载分配给所有工作人员。另一方面,bsxfun 通过在同一进程中启动轻量级线程来并行执行函数(如果它选择这样做!)
  • 嗯,那是不是说换个CPU频率更高的2核/4线程电脑会更好?

标签: multithreading performance matlab bsxfun


【解决方案1】:

bsxfun 通过在同一个 MATLAB 进程中启动 threads 来并行执行传递的函数。仅使用 Windows 中的“任务管理器”,您无法看到正在执行的线程,只能看到正在运行的进程。

请记住,对于supported multithreaded functions,只有当数据足够大时才适用加速(但在您的示例中,您肯定高于该阈值)。

另一个选项是使用 Parallel Computing Toolbox。使用 matlabpool 函数,您可以在后面打开新的 MATLAB 会话,每个会话都在一个单独的进程中。当您调用parfor 时,它会将负载分配给所有工作人员。这种方法可以很好地扩展,尤其是当您在计算机集群上运行它时。

我认为应该可以在同一代码中同时使用两者。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-27
    • 1970-01-01
    • 1970-01-01
    • 2016-12-09
    • 2011-10-09
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多