【发布时间】: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 thing:
matlabpool在后面打开新的 MATLAB 会话,每个会话都在一个单独的进程中。当您使用parfor时,它会将负载分配给所有工作人员。另一方面,bsxfun通过在同一进程中启动轻量级线程来并行执行函数(如果它选择这样做!) -
嗯,那是不是说换个CPU频率更高的2核/4线程电脑会更好?
标签: multithreading performance matlab bsxfun