Skip to content
Snippets Groups Projects
Commit eb13ba24 authored by Paul Heinzlreiter's avatar Paul Heinzlreiter
Browse files

* merge LETs

parent 0f4e9b6f
No related merge requests found
......@@ -207,105 +207,14 @@ namespace nbody {
this->send(this->tree->copyRefinements(this->domains[i]), i);
}
}
int received = 0;
while (received < this->parallelSize - 1) {
vector<Body> buffer;
this->recv(buffer, MPI_ANY_SOURCE);
//cout << "recved " + buffer.size() << endl;
//print(this->parallelRank, buffer);
received++;
}
/*
vector<vector<Body> > sendRefinements;
MPI_Request* sendRequests = new MPI_Request[this->parallelSize];
for (int i = 0; i < this->parallelSize; i++) {
if (i != this->parallelRank) {
sendRefinements.push_back(this->tree->copyRefinements(this->domains[i]));
MPI_Isend(&sendRefinements[i], (int) sendRefinements[i].size(), this->bodyType, i, 0, MPI_COMM_WORLD, &sendRequests[i]);
} else {
sendRefinements.push_back(vector<Body>());
}
}
int received = 0;
Body** data = new Body*[this->parallelSize];
MPI_Request* recvRequests = new MPI_Request[this->parallelSize];
for (int i = 0; i < this->parallelSize; i++) {
data[i] = NULL;
}
while (received < this->parallelSize - 1) {
for (int i = 0; i < this->parallelSize; i++) {
if (i != this->parallelRank && data[i] == NULL) {
int ready;
MPI_Status probeStatus;
MPI_Iprobe(i, 0, MPI_COMM_WORLD, &ready, &probeStatus);
if (ready) {
int count;
MPI_Status status;
MPI_Get_count(&probeStatus, this->bodyType, &count);
data[i] = new Body[count];
MPI_Irecv(&data[i][0], count, this->bodyType, i, 0, MPI_COMM_WORLD, &recvRequests[i]);
MPI_Wait(&recvRequests[i], &status);
cout << this->parallelRank << ": " << count << " from " << i << " received" << endl;
}
}
}
}
delete[] sendRequests;
delete[] recvRequests;
for (int i = 0; i < this->parallelSize; i++) {
delete[] data[i];
}
delete[] data;
*/
/*
int* lengths = new int[this->parallelSize];
for (int i = 0; i < this->parallelSize; i++) {
if (i != this->parallelRank) {
refinements.push_back(this->tree->copyRefinements(this->domains[i]));
} else {
refinements.push_back(vector<Body>());
}
lengths[i] = refinements.back().size();
}
MPI_Alltoall(lengths, 1, MPI_INT, lengths, 1, MPI_INT, MPI_COMM_WORLD);
for (int i = 0; i < this->parallelSize; i++) {
if (i != this->parallelRank) {
MPI_Send(&(refinements[i][0]), (int) refinements[i].size(), this->bodyType, i, 0, MPI_COMM_WORLD);
}
}
for (int i = 0; i < this->parallelSize; i++) {
if (i != this->parallelRank) {
MPI_Recv()
}
}
delete[] lengths;
*/
//receive bodies and integrate them into local tree for simulation
/*
int received = 0;
while (received < this->parallelSize - 1) {
for (int i = 0; i < this->parallelSize - 1; i++) {
vector<Body> refinements;
//int source = this->recv(refinements);
//cout << "refR: " << this->parallelRank << " <- " << source << ": " << refinements.size() << endl;
//this->tree->mergeLET(refinements);
//integrate bodies in order of arrival to do communication/computation overlapping
this->comms[0].recvBlocking(MPI_ANY_SOURCE, refinements);
this->recv(refinements, MPI_ANY_SOURCE);
this->tree->mergeLET(refinements);
//this->tree.getRootBB().print();
received++;
}
*/
if (!this->tree->isCorrect()) {
cout << "WRONG" << endl;
}
......@@ -320,7 +229,7 @@ namespace nbody {
this->tree->build(this->bodies);
}
*/
this->tree->build(this->bodies);
this->tree->build(this->bodies, this->overallDomain);
if (!this->tree->isCorrect()) {
cout << "wrong tree" << endl;
} else {
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment