在Matlab中使用SPMD发送数据

时间:2013-04-12 23:40:08

标签: matlab parallel-processing

在Matlab(2012b)中,有没有办法在发送数据之前暂停SPMD创建的一个线程?因为线程2只有一个有限大小的缓冲区来接受来自线程1的数据,并且根据matlab,labSend()将在数据传输完成之前返回,这意味着理论上线程1可以继续向线程2发送数据,直到系统运行内存不足:

我想做的是这样的事情:

 spmd (2)

  if labindex==1
    %...
    if (BufferAtLab2isNotFull)
        labSend(data, 2);
    end
    %...
  elseif labindex==2
    if (BufferNotFull)
      labReceive(data, 1);
    end
    %...

  end
 end

在C / C ++中,使用共享内存多线程很容易做到这一点,但在matlab中似乎很难,因为没有共享资源需要检查。

1 个答案:

答案 0 :(得分:0)

如果您希望实验1在每个labSend之后等待,直到实验2完成它labRecieve,那么只需在labBarrier中添加spmd (2) if labindex==1 %... if (BufferAtLab2isNotFull) labSend(data, 2); end labBarrier; %... elseif labindex==2 labSend(bufSize,1); %... if (BufferNotFull) labReceive(data, 1); end labBarrier; %... end end ,这将导致实验1等到所有线程都达到这一点。

{{1}}

如果您担心实验室1在单个labSend中发送太多,您可以随时让实验室2发送它的缓冲区大小。