首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MPI_Test: MPI_ERR_TRUNCATE

MPI_Test: MPI_ERR_TRUNCATE
EN

Stack Overflow用户
提问于 2017-05-24 15:41:29
回答 1查看 519关注 0票数 0

以下代码提供了此错误消息:

在引发“boost::exception_detail::clone_impl”实例后调用终止 what():MPI_Test: MPI_ERR_TRUNCATE:消息截断

这个问题可能与这个职位中讨论的boost::mpi的错误有关。我想确定错误的原因。

如果我只循环一次(for (int z=0; z<1; ++z)),代码就会工作,但是对于z<2,我会得到所提到的错误消息。

代码语言:javascript
复制
#include <boost/mpi.hpp>

class MyClass
{
    std::vector<double> vec;

    public:

    void send_data(const boost::mpi::communicator& world, boost::mpi::request& req)
    {
        if (world.rank() == 0)
        {
            vec.resize(1000);
            req = world.isend(1, 0, vec);
        }
    }

    void recv_data(const boost::mpi::communicator& world)
    {
        if (world.rank() == 1)
        {
            while (true)
            {
                boost::mpi::request req = world.irecv(boost::mpi::any_source, 0, vec);
                if (!req.test())
                {
                    req.cancel();
                    //req.wait(); <-- hangs the program.
                    break;
                }
            }
        }
    }
};

int main()
{
    boost::mpi::environment env;
    boost::mpi::communicator world;

    MyClass myclass;

    for (int z=0; z<2; ++z) // works if loop only once.
    {
        boost::mpi::request req;

        myclass.send_data(world, req);
        world.barrier();
        myclass.recv_data(world);
        world.barrier();
        if (world.rank() == 0)
            req.wait();
    }

    return 0;
}
EN

回答 1

Stack Overflow用户

发布于 2017-05-24 18:29:35

当同一个通信器、标记、序列化类型的源上有多个似乎非常相关的臭虫时,就会出现irecv。所以你可以用不同的标签试试。尽管如此,由于cancel的错误,这是行不通的.

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

https://stackoverflow.com/questions/44162979

复制
相关文章

相似问题

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