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

Refactor tests for copyEdgeNodes

parent f1d42021
No related branches found
No related tags found
1 merge request!104Add Communication Hiding to GPU version
......@@ -3,6 +3,7 @@
#include <filesystem>
#include "ExchangeData27.h"
#include "gpu/VirtualFluids_GPU/LBM/LB.h"
#include <basics/config/ConfigurationFile.h>
......@@ -30,7 +31,10 @@ protected:
int level = 0;
int numNodes = 10;
std::vector<real> recvFs;
std::vector<real> sendFs;
std::vector<ProcessNeighbor27> sendProcessNeighborHost;
std::vector<ProcessNeighbor27> recvProcessNeighborHost;
void SetUp() override
{
para = initParameterClass();
......@@ -43,35 +47,64 @@ protected:
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);
}
SPtr<std::vector<ProcessNeighbor27>> setUpRecvProcessNeighbors(int numberOfNodesInRecv){
SPtr<std::vector<ProcessNeighbor27>>recvProcessNeighborHost=std::make_shared<std::vector<ProcessNeighbor27>>(1);
void setUpRecvProcessNeighbors(int numberOfNodesInRecv)
{
recvFs.resize(numberOfNodesInRecv);
std::fill(recvFs.begin(), recvFs.end(), 0.5); // 0.5s should not be copied
for (LBMSimulationParameter::EdgeNodePositions edgeNode : para->getParH(level)->edgeNodesXtoZ) {
if(edgeNode.indexInRecvBuffer>numberOfNodesInRecv){
continue;
}
recvFs[edgeNode.indexInRecvBuffer] = 0.1; // 0.1s should be copied
}
setUpFsByCopyingF0(recvFs, numberOfNodesInRecv);
(*recvProcessNeighborHost)[0].f[0] = recvFs.data();
(*recvProcessNeighborHost)[0].numberOfNodes = numberOfNodesInRecv;
return recvProcessNeighborHost;
}
recvProcessNeighborHost.resize(1);
recvProcessNeighborHost[0].f[0] = recvFs.data();
recvProcessNeighborHost[0].numberOfNodes = numberOfNodesInRecv;
}
void setUpSendProcessNeighbors(int numberOfNodesInSend)
{
sendFs.resize(27 * numberOfNodesInSend);
std::fill(sendFs.begin(), sendFs.end(), 0.0);
sendProcessNeighborHost.resize(1);
sendProcessNeighborHost[0].f[0] = sendFs.data();
sendProcessNeighborHost[0].numberOfNodes = numberOfNodesInSend;
}
};
TEST_F(ExchangeData27Test_CopyEdgeNodesXZTest, copyEdgeNodes_XZ_CommunicationAfterFtoC_recvVectorFullSize)
{
int numNodesAfterFtoC = 5; // indexInSend < 5 --> mode is in AfterFToC
setUpRecvProcessNeighbors(numNodes);
setUpSendProcessNeighbors(numNodesAfterFtoC);
// recvProcessNeighborHost
SPtr<std::vector<ProcessNeighbor27>>recvProcessNeighborHost = setUpRecvProcessNeighbors(numNodes);
// expected
std::vector<real> expectedFs(numNodesAfterFtoC, 0.0);
expectedFs[1] = 0.1;
expectedFs[3] = 0.1;
setUpFsByCopyingF0(expectedFs, numNodesAfterFtoC);
// sendProcessNeighborHost
std::vector<ProcessNeighbor27> sendProcessNeighborHost(1);
std::vector<real> sendFs(27 * numNodesAfterFtoC, 0.0);
sendProcessNeighborHost[0].f[0] = sendFs.data();
sendProcessNeighborHost[0].numberOfNodes = numNodesAfterFtoC;
// act
copyEdgeNodes(para->getParH(level)->edgeNodesXtoZ, recvProcessNeighborHost, sendProcessNeighborHost);
// convert result to std::vector
std::vector<real> result;
result.assign(sendProcessNeighborHost[0].f[0], sendProcessNeighborHost[0].f[0] + 27 * numNodesAfterFtoC);
EXPECT_THAT(result, testing::Eq(expectedFs));
}
TEST_F(ExchangeData27Test_CopyEdgeNodesXZTest, copyEdgeNodes_XZ_CommunicationAfterFtoC_recvVectorShort)
{
int numNodesAfterFtoC = 5; // indexInSend < 5 --> mode is in AfterFToC
setUpRecvProcessNeighbors(numNodesAfterFtoC);
setUpSendProcessNeighbors(numNodesAfterFtoC);
// expected
std::vector<real> expectedFs(numNodesAfterFtoC, 0.0);
......@@ -80,7 +113,7 @@ TEST_F(ExchangeData27Test_CopyEdgeNodesXZTest, copyEdgeNodes_XZ_CommunicationAft
setUpFsByCopyingF0(expectedFs, numNodesAfterFtoC);
// act
copyEdgeNodes(para->getParH(level)->edgeNodesXtoZ, *recvProcessNeighborHost, sendProcessNeighborHost);
copyEdgeNodes(para->getParH(level)->edgeNodesXtoZ, recvProcessNeighborHost, sendProcessNeighborHost);
// convert result to std::vector
std::vector<real> result;
......@@ -91,14 +124,8 @@ TEST_F(ExchangeData27Test_CopyEdgeNodesXZTest, copyEdgeNodes_XZ_CommunicationAft
TEST_F(ExchangeData27Test_CopyEdgeNodesXZTest, copyEdgeNodes_XZ_CommunicateAll)
{
// recvProcessNeighborHost
SPtr<std::vector<ProcessNeighbor27>>recvProcessNeighborHost = setUpRecvProcessNeighbors(numNodes);
// sendProcessNeighborHost
std::vector<ProcessNeighbor27> sendProcessNeighborHost(1);
std::vector<real> sendFs(27 * numNodes, 0.0);
sendProcessNeighborHost[0].f[0] = sendFs.data();
sendProcessNeighborHost[0].numberOfNodes = numNodes;
setUpRecvProcessNeighbors(numNodes);
setUpSendProcessNeighbors(numNodes);
// expected
std::vector<real> expectedFs(numNodes, 0.0);
......@@ -109,7 +136,7 @@ TEST_F(ExchangeData27Test_CopyEdgeNodesXZTest, copyEdgeNodes_XZ_CommunicateAll)
setUpFsByCopyingF0(expectedFs, numNodes);
// act
copyEdgeNodes(para->getParH(level)->edgeNodesXtoZ, *recvProcessNeighborHost, sendProcessNeighborHost);
copyEdgeNodes(para->getParH(level)->edgeNodesXtoZ, recvProcessNeighborHost, sendProcessNeighborHost);
// convert result to std::vector
std::vector<real> result;
......
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