1

我正在使用 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

在任务管理器上我看到的不是只有一个核心被占用。我错过了什么还是这是正常的?

4

1 回答 1

2

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

请记住,对于受支持的多线程函数,只有当数据足够大时才适用加速(但在您的示例中,您肯定高于该阈值)。

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

我认为应该可以在相同的代码中使用两者..

于 2012-06-06T14:18:30.067 回答