Boost logo

Boost Users :

Subject: [Boost-users] [mpi] irecv / send problem
From: Nick Collier (nick.collier_at_[hidden])
Date: 2009-06-12 15:16:17


I running into an issue where an irecv followed by a send results in
deadlock. A simple test case,

class Item {
private:

        friend class boost::serialization::access;

        template<class Archive>
        void serialize(Archive& ar, const unsigned int version) {
                ar & val;
        }

public:
        int val;
        Item() : val(1) {
        }

};

struct Receipt {

        boost::mpi::request request;
        std::vector<Item> items;
};

int main(int argc, char **argv) {

        mpi::environment env(argc, argv);
        mpi::communicator world;
        Receipt receipt;

        vector<Item> msg(100000);

        int other = world.rank() == 0 ? 1 : 0;
        cout << world.rank() << " irecv from " << other << endl;
        receipt.request = world.irecv(other, 0, receipt.items);
        cout << world.rank() << " sending to " << other << endl;
        world.send(other, 0, msg);

        receipt.request.wait();

        cout << "Done" << endl;
}

Run with mpirun -np 2, this never completes. It does complete with
vector<Item> msg(10) however.

Nick


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net