helper.setLogicalProcessorCount(8);
helper.expectWarningMatchingRegex("Applying core pinning offset 1");
helper.expectPinningMessage(true, 2);
- helper.expectAffinitySet(1 + 2*gmx_node_rank());
+ helper.expectAffinitySet(1 + 2 * gmx_node_rank());
helper.setAffinity(1);
}
{
GMX_MPI_TEST(4);
ThreadAffinityTestHelper helper;
- helper.setPhysicalNodeId(gmx_node_rank()/2);
+ helper.setPhysicalNodeId(gmx_node_rank() / 2);
helper.setLogicalProcessorCount(2);
helper.expectPinningMessage(false, 1);
- helper.expectAffinitySet(gmx_node_rank()%2);
+ helper.expectAffinitySet(gmx_node_rank() % 2);
helper.setAffinity(1);
}
class ThreadAffinityHeterogeneousNodesTest : public ::testing::Test
{
- public:
- int currentNode() const { return gmx_node_rank() / 2; }
- int indexInNode() const { return gmx_node_rank() % 2; }
- bool isMaster() const { return gmx_node_rank() == 0; }
+public:
+ int currentNode() const { return gmx_node_rank() / 2; }
+ int indexInNode() const { return gmx_node_rank() % 2; }
+ bool isMaster() const { return gmx_node_rank() == 0; }
- void setupNodes(ThreadAffinityTestHelper *helper, std::array<int, 2> cores)
- {
- const int node = currentNode();
- helper->setPhysicalNodeId(node);
- helper->setLogicalProcessorCount(cores[node]);
- }
- void expectNodeAffinitySet(ThreadAffinityTestHelper *helper, int node, int core)
+ void setupNodes(ThreadAffinityTestHelper* helper, std::array<int, 2> cores)
+ {
+ const int node = currentNode();
+ helper->setPhysicalNodeId(node);
+ helper->setLogicalProcessorCount(cores[node]);
+ }
+ void expectNodeAffinitySet(ThreadAffinityTestHelper* helper, int node, int core)
+ {
+ if (currentNode() == node)
{
- if (currentNode() == node)
- {
- helper->expectAffinitySet(core);
- }
+ helper->expectAffinitySet(core);
}
+ }
};
TEST_F(ThreadAffinityHeterogeneousNodesTest, PinsOnMasterOnly)
GMX_MPI_TEST(4);
ThreadAffinityTestHelper helper;
helper.setAffinityOption(ThreadAffinity::On);
- setupNodes(&helper, {{2, 1}});
+ setupNodes(&helper, { { 2, 1 } });
helper.expectWarningMatchingRegexIf("Oversubscribing the CPU", isMaster() || currentNode() == 1);
if (currentNode() == 0)
{
GMX_MPI_TEST(4);
ThreadAffinityTestHelper helper;
helper.setAffinityOption(ThreadAffinity::On);
- setupNodes(&helper, {{1, 2}});
+ setupNodes(&helper, { { 1, 2 } });
helper.expectWarningMatchingRegexIf("Oversubscribing the CPU", currentNode() == 0);
if (currentNode() == 1)
{
GMX_MPI_TEST(4);
ThreadAffinityTestHelper helper;
helper.setAffinityOption(ThreadAffinity::On);
- setupNodes(&helper, {{2, 0}});
- helper.expectWarningMatchingRegexIf("No information on available cores", isMaster() || currentNode() == 1);
+ setupNodes(&helper, { { 2, 0 } });
+ helper.expectWarningMatchingRegexIf("No information on available cores",
+ isMaster() || currentNode() == 1);
if (currentNode() == 0)
{
helper.expectPinningMessage(false, 1);
{
GMX_MPI_TEST(4);
ThreadAffinityTestHelper helper;
- setupNodes(&helper, {{2, 1}});
+ setupNodes(&helper, { { 2, 1 } });
helper.expectWarningMatchingRegexIf("Oversubscribing the CPU", isMaster() || currentNode() == 1);
if (currentNode() == 0)
{
{
GMX_MPI_TEST(4);
ThreadAffinityTestHelper helper;
- setupNodes(&helper, {{1, 2}});
+ setupNodes(&helper, { { 1, 2 } });
helper.expectWarningMatchingRegexIf("Oversubscribing the CPU", currentNode() == 0);
if (currentNode() == 1)
{
ThreadAffinityTestHelper helper;
helper.setAffinityOption(ThreadAffinity::On);
helper.setOffsetAndStride(2, 0);
- setupNodes(&helper, {{4, 2}});
+ setupNodes(&helper, { { 4, 2 } });
helper.expectWarningMatchingRegex("Applying core pinning offset 2");
helper.expectWarningMatchingRegexIf("Requested offset too large", isMaster() || currentNode() == 1);
if (currentNode() == 0)
{
helper.expectPinningMessage(false, 1);
}
- expectNodeAffinitySet(&helper, 0, indexInNode()+2);
+ expectNodeAffinitySet(&helper, 0, indexInNode() + 2);
helper.setAffinity(1);
}
ThreadAffinityTestHelper helper;
helper.setAffinityOption(ThreadAffinity::On);
helper.setOffsetAndStride(0, 2);
- setupNodes(&helper, {{4, 2}});
+ setupNodes(&helper, { { 4, 2 } });
helper.expectWarningMatchingRegexIf("Requested stride too large", isMaster() || currentNode() == 1);
if (currentNode() == 0)
{
helper.expectPinningMessage(true, 2);
}
- expectNodeAffinitySet(&helper, 0, 2*indexInNode());
+ expectNodeAffinitySet(&helper, 0, 2 * indexInNode());
helper.setAffinity(1);
}