首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Matlab中使用SPMD发送数据

在Matlab中使用SPMD发送数据
EN

Stack Overflow用户
提问于 2013-04-13 07:40:08
回答 1查看 834关注 0票数 3

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

我想做的是这样的:

代码语言:javascript
复制
 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中,这似乎很难,因为没有共享资源可供检查。

EN

回答 1

Stack Overflow用户

发布于 2014-03-23 07:06:25

如果您希望lab 1在每个labSend之后等待,直到lab 2完成labRecieve,那么只需在每个labBarrier中添加一个labBarrier,这将导致lab 1等待,直到所有线程都达到该点。

代码语言:javascript
复制
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先发送其缓冲区大小。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15982516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档