Skip to content
Snippets Groups Projects
Commit 5494db4b authored by Anna Wellmann's avatar Anna Wellmann
Browse files

Use fixture for setup of parameter class in CopyEdgeNodesTest

parent bfecdf8d
No related branches found
No related tags found
1 merge request!104Add Communication Hiding to GPU version
...@@ -252,7 +252,7 @@ void exchangeCollDataYGPU27(Parameter *para, vf::gpu::Communicator *comm, CudaMe ...@@ -252,7 +252,7 @@ void exchangeCollDataYGPU27(Parameter *para, vf::gpu::Communicator *comm, CudaMe
if (para->getUseStreams() && para->getNumberOfProcessNeighborsX(level, "recv") > 0 && para->getParH(level)->sendProcessNeighborY.size() != 0) { if (para->getUseStreams() && para->getNumberOfProcessNeighborsX(level, "recv") > 0 && para->getParH(level)->sendProcessNeighborY.size() != 0) {
if( para->getParH(level)->sendProcessNeighborY[0].numberOfNodes == (*sendProcessNeighborHost)[0].numberOfNodes){ if( para->getParH(level)->sendProcessNeighborY[0].numberOfNodes == (*sendProcessNeighborHost)[0].numberOfNodes){
// check if in communication of all nodes (as opposed to reduced communication after fine to coarse) // check if in communication of all nodes (as opposed to reduced communication after fine to coarse)
copyEdgeNodes(para->getParH(level)->edgeNodesXtoY, para->getParH(level)->recvProcessNeighborX, *sendProcessNeighborHost); copyEdgeNodes(para->getParH(level)->edgeNodesXtoY, para->getParH(level)->recvProcessNeighborX, *sendProcessNeighborHost);
} else{ } else{
copyEdgeNodes(para->getParH(level)->edgeNodesXtoY, para->getParH(level)->recvProcessNeighborsAfterFtoCX, *sendProcessNeighborHost); copyEdgeNodes(para->getParH(level)->edgeNodesXtoY, para->getParH(level)->recvProcessNeighborsAfterFtoCX, *sendProcessNeighborHost);
} }
......
...@@ -15,7 +15,7 @@ auto RealEq = [](auto value) { ...@@ -15,7 +15,7 @@ auto RealEq = [](auto value) {
}; };
SPtr<Parameter> initParameterClass(std::shared_ptr<Parameter> &para) SPtr<Parameter> initParameterClass()
{ {
std::filesystem::path filePath = __FILE__; // assuming that the config file is stored parallel to this file. std::filesystem::path filePath = __FILE__; // assuming that the config file is stored parallel to this file.
filePath.replace_filename("ExchangeData27Test.cfg"); filePath.replace_filename("ExchangeData27Test.cfg");
...@@ -24,36 +24,45 @@ SPtr<Parameter> initParameterClass(std::shared_ptr<Parameter> &para) ...@@ -24,36 +24,45 @@ SPtr<Parameter> initParameterClass(std::shared_ptr<Parameter> &para)
return std::make_shared<Parameter>(config, 1, 0); return std::make_shared<Parameter>(config, 1, 0);
} }
TEST(ExchangeData27Test, copyEdgeNodes_XZ_CommunicationAfterFtoC) class ExchangeData27Test_CopyEdgeNodesXZTest: public testing::Test{
{ protected:
int level = 0; SPtr<Parameter> para;
SPtr<Parameter> para = initParameterClass(para); int level = 0;
para->setMaxLevel(level + 1); // setMaxLevel resizes parH int numNodes = 10;
para->initLBMSimulationParameter(); // init parH
// indexInSend < 5 --> in AfterFToC
para->getParH(level)->edgeNodesXtoZ.emplace_back(0,1,0,1);
para->getParH(level)->edgeNodesXtoZ.emplace_back(0,6,0,6);
para->getParH(level)->edgeNodesXtoZ.emplace_back(0,2,0,3);
para->getParH(level)->edgeNodesXtoZ.emplace_back(0,7,0,8);
int numNodes = 10; void SetUp() override {
int numNodesAfterFtoC = 5; para = initParameterClass();
para->setMaxLevel(level + 1); // setMaxLevel resizes parH
para->initLBMSimulationParameter(); // init parH
para->getParH(level)->edgeNodesXtoZ.emplace_back(0,1,0,1);
para->getParH(level)->edgeNodesXtoZ.emplace_back(0,6,0,6);
para->getParH(level)->edgeNodesXtoZ.emplace_back(0,2,0,3);
para->getParH(level)->edgeNodesXtoZ.emplace_back(0,7,0,8);
para->getParH(level)->edgeNodesXtoZ.emplace_back(0,7,0,8);
para->getParH(level)->edgeNodesXtoZ.emplace_back(0,7,0,8);
}
};
TEST_F(ExchangeData27Test_CopyEdgeNodesXZTest, copyEdgeNodes_XZ_CommunicationAfterFtoC_recvVectorFullSize)
{
int numNodesAfterFtoC = 5; // indexInSend < 5 --> in AfterFToC
// recvProcessNeighborHost
std::vector<ProcessNeighbor27> recvProcessNeighborHost(1); std::vector<ProcessNeighbor27> recvProcessNeighborHost(1);
std::vector<real> recvFs(numNodes, 0.5); std::vector<real> recvFs(numNodes, 0.5);
for (LBMSimulationParameter::EdgeNodePositions edgeNode : para->getParH(level)->edgeNodesXtoZ){ for (LBMSimulationParameter::EdgeNodePositions edgeNode : para->getParH(level)->edgeNodesXtoZ){
recvFs[edgeNode.indexInRecvBuffer] = 0.1; recvFs[edgeNode.indexInRecvBuffer] = 0.1;
} }
for (uint direction = 0; direction <= dirEND; direction ++){ for (uint direction = 0; direction < dirEND; direction ++){
recvFs.insert(recvFs.end(), recvFs.begin(), recvFs.begin()+10); recvFs.insert(recvFs.end(), recvFs.begin(), recvFs.begin()+numNodes);
} }
recvProcessNeighborHost[0].f[0] = recvFs.data(); recvProcessNeighborHost[0].f[0] = recvFs.data();
recvProcessNeighborHost[0].numberOfNodes = numNodes; recvProcessNeighborHost[0].numberOfNodes = numNodes;
// sendProcessNeighborHost
std::vector<ProcessNeighbor27> sendProcessNeighborHost(1); std::vector<ProcessNeighbor27> sendProcessNeighborHost(1);
std::vector<real> sendFs(27*numNodesAfterFtoC, 0.0); std::vector<real> sendFs(27*numNodesAfterFtoC, 0.0);
sendProcessNeighborHost[0].f[0] = sendFs.data(); sendProcessNeighborHost[0].f[0] = sendFs.data();
...@@ -63,9 +72,9 @@ TEST(ExchangeData27Test, copyEdgeNodes_XZ_CommunicationAfterFtoC) ...@@ -63,9 +72,9 @@ TEST(ExchangeData27Test, copyEdgeNodes_XZ_CommunicationAfterFtoC)
std::vector<real> expectedFs(numNodesAfterFtoC, 0.0); std::vector<real> expectedFs(numNodesAfterFtoC, 0.0);
expectedFs[1] = 0.1; expectedFs[1] = 0.1;
expectedFs[3] = 0.1; expectedFs[3] = 0.1;
std::vector<real> expectedFsAllDirections; // std::vector<real> expectedFs;
for (uint direction = 0; direction <= dirEND; direction ++){ for (uint direction = 0; direction < dirEND; direction ++){
expectedFsAllDirections.insert(expectedFsAllDirections.end(), expectedFs.begin(), expectedFs.end()); expectedFs.insert(expectedFs.end(), expectedFs.begin(), expectedFs.begin()+numNodesAfterFtoC);
} }
// act // act
...@@ -75,28 +84,20 @@ TEST(ExchangeData27Test, copyEdgeNodes_XZ_CommunicationAfterFtoC) ...@@ -75,28 +84,20 @@ TEST(ExchangeData27Test, copyEdgeNodes_XZ_CommunicationAfterFtoC)
std::vector<real> result; std::vector<real> result;
result.assign(sendProcessNeighborHost[0].f[0], sendProcessNeighborHost[0].f[0] + 27*numNodesAfterFtoC); result.assign(sendProcessNeighborHost[0].f[0], sendProcessNeighborHost[0].f[0] + 27*numNodesAfterFtoC);
EXPECT_THAT(result, testing::Eq(expectedFsAllDirections)); EXPECT_THAT(result, testing::Eq(expectedFs));
} }
TEST(ExchangeData27Test, copyEdgeNodes_XZ_CommunicateAll) TEST_F(ExchangeData27Test_CopyEdgeNodesXZTest, copyEdgeNodes_XZ_CommunicateAll)
{ {
int level = 0;
SPtr<Parameter> para = initParameterClass(para);
para->setMaxLevel(level + 1); // setMaxLevel resizes parH
para->initLBMSimulationParameter(); // init parH
para->getParH(level)->edgeNodesXtoZ.emplace_back(0,1,0,1);
para->getParH(level)->edgeNodesXtoZ.emplace_back(0,6,0,6);
para->getParH(level)->edgeNodesXtoZ.emplace_back(0,2,0,3);
para->getParH(level)->edgeNodesXtoZ.emplace_back(0,7,0,8);
int numNodes = 10; int numNodes = 10;
// recvProcessNeighborHost
std::vector<ProcessNeighbor27> recvProcessNeighborHost(1); std::vector<ProcessNeighbor27> recvProcessNeighborHost(1);
std::vector<real> recvFs(27*numNodes, 0.1); std::vector<real> recvFs(27*numNodes, 0.1);
recvProcessNeighborHost[0].f[0] = recvFs.data(); recvProcessNeighborHost[0].f[0] = recvFs.data();
recvProcessNeighborHost[0].numberOfNodes = numNodes; recvProcessNeighborHost[0].numberOfNodes = numNodes;
// sendProcessNeighborHost
std::vector<ProcessNeighbor27> sendProcessNeighborHost(1); std::vector<ProcessNeighbor27> sendProcessNeighborHost(1);
std::vector<real> sendFs(27*numNodes, 0.0); std::vector<real> sendFs(27*numNodes, 0.0);
sendProcessNeighborHost[0].f[0] = sendFs.data(); sendProcessNeighborHost[0].f[0] = sendFs.data();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment