#include #include #include #include #include #include #include //for atoi (in case someone doesn't have boost) const int buflen=50000*24; int numprocs, rank, namelen; char processor_name[MPI_MAX_PROCESSOR_NAME]; using namespace std; class Message { public: MPI_Request req; MPI_Status status; char buffer[buflen]; int count; void reset(char val){ memset(buffer,val,sizeof(char)*buflen); } Message(): count(0) { reset(rank); } Message(int _count) : count(_count) { reset(count+rank+1); } bool preVerify(){ char content=rank; for(int b=0;b"<< bi << " = "<< (int)buffer[bi]<"<< bi << " = "<< (int)buffer[bi]<1){ //optionally specify number of repeats on the command line reps=atoi(argv[1]); } MPI_Init(&argc, &argv); MPI_Comm_size(MPI_COMM_WORLD, &numprocs); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Get_processor_name(processor_name, &namelen); int senders=numprocs/2; int receivers=numprocs-senders; assert(senders>0); assert(receivers>0); cout << "Process "< > sendQs(receivers); vector counts(receivers,0); for(int i=0;i &sendQ=sendQs[receiver]; int target=receiver+senders; sendQ.push_back(Message(counts[receiver]++)); Message &msg=sendQ.back(); char content=msg.count+rank+1; //confirm that everything we're sending hasn't been corrupted assert(msg.buffer); // cerr << rank<< ">Starting send "<:Started send "< msgSenders(senders); for(int si=0;si=reps) continue; //done with this one //see if any messages have been received int f=0; if(1){ //use tests MPI_Test(&msg.req,&f,&msg.status); }else{ cout << "Waiting on message "<