美文网首页
MATLAB并行计算执行spmd或parfor命令时获取当前线程

MATLAB并行计算执行spmd或parfor命令时获取当前线程

作者: LIANG静闲 | 来源:发表于2019-12-02 20:49 被阅读0次

大家使用并行计算的目的肯定是为了节约时间,并行计算适合执行简单重复的操作。MATLAB通常使用spmd或parfor命令完成并行计算。在执行并行计算时,因为某种需要我们想知道当前线程的ID。
spmd命令
spmd命令同时开启多个worker计算,同名变量在每个worker中单独计算,其结果被共同存储于Composite变量中。即如果程序中变量名为name,那么计算结束后第一个worker的结果存储于name{1}中,第n个worker的结果存储于name{n}中。spmd的高明之处在于,使用spmd相当于你手动开启了很多个matlab界面在同时计算一个程序,各个worker中的变量空间是互相没有影响的。

计算过程中使用内置的labindex变量获取当前worker的ID。示例如下

parpool(3)
spmd
  % build magic squares in parallel
  q = magic(labindex + 2);
  disp(['当前worker编号:' num2str(labindex)])
end
for ii=1:length(q)
  % plot each magic square
  figure, imagesc(q{ii}); % q就是一个composite变量
end
delete(gcp)

parfor命令
parfor命令同时开启很多个task进行并行计算,所有task共享同一个变量空间中的变量,即前一个task中程序对于一个变量值的更改,会影响到另外一个task程序对于该变量值的读取(只能读取到被更改后的变量值)。假设parfor中只有一个语句,执行i=i+1,那么两个task各执行100次后i将从0变到200;如果是spmd命令,则i在每个worker中都单独变到了100,不存在worker间的互相影响,但是最终i变成了一个Composite变量,i{1}=i{2}=100。

parfor在计算过程中使用如下命令获取当前task的ID:

id = get(getCurrentTask(),'ID'); % parfor中获取当前线程ID

更多对于spmd或parfor命令的介绍请查看MATLAB帮助文档或者自行在网上搜索资料。

相关文章

网友评论

      本文标题:MATLAB并行计算执行spmd或parfor命令时获取当前线程

      本文链接:https://www.haomeiwen.com/subject/ytafgctx.html