1

我正在使用 boost-mpi,但我遇到了一个我很难弄清楚的错误。我正在使用 recv 调用,并且 boost 代码中的断言失败:

void boost::mpi::binary_buffer_iprimitive::load_impl(void *, int): Assertion `position+l<=static_cast<int>(buffer_.size())’

这来自位于 boost/mpi/detail/ 中的文件 binary_buffer_iprimitive.hpp。

这在我第一次收到时不会发生,所以我知道这不是我每次发送/接收调用的一般错误。我认为这个断言是检查缓冲区是否足够大以容纳正在接收的数据,但我什至不确定。如果是这种情况,什么会导致缓冲区不够大?难道不应该通过潜在的提升来解决这个问题吗?

for (unsigned int i=0;i<world.size();i++)
    {
        if (particles_to_be_sent[i].size()>0)
        {
            ghosts_to_be_sent[i].part_crossed_send()='b';
            world.isend(i,20,particles_to_be_sent[i]);
        }
    }

    mpi::all_to_all(world,ghosts_to_be_sent,ghosts_received);

    //receive particles
    for (int recv_rank=0;recv_rank<world.size();recv_rank++)
    {
        if (ghosts_received[recv_rank].part_crossed_send()=='b')
        {
            world.recv(recv_rank,20,particles_received); //this line fails
            for (unsigned int i=0;i<particles_received.size();i++)
            {
                //do stuff
            }
        }

        for (unsigned int j=0;j<ghosts_received[recv_rank].ghosts_to_send().size();j++)
        {
            //do stuff
        }
    }
4

0 回答 0