在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中,这似乎很难,因为没有共享资源可供检查。
发布于 2014-03-23 07:06:25
如果您希望lab 1在每个labSend之后等待,直到lab 2完成labRecieve,那么只需在每个labBarrier中添加一个labBarrier,这将导致lab 1等待,直到所有线程都达到该点。
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在单个labSend中发送过多数据,您可以始终让实验2先发送其缓冲区大小。
https://stackoverflow.com/questions/15982516
复制相似问题